C语言基于socket-实现客户端-服务端通信

C语言基于socket-实现客户端-服务端通信,第1张

概述本文章向大家介绍C语言基于socket-实现客户端-服务端通信,主要包括C语言基于socket-实现客户端-服务端通信使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

C语言基于socket-实现客户端-服务端通信

关于socket不多赘述,博主上一篇做过简单介绍,详情请自行百度查询,本次主要做的是基于socket通信的C语言实现

需要使用的头文件:


winsock2.h


*** 作平台windows,使用编译器dev(报错缺的文件看文章末尾的补充)

winsock2中数据结构及调用简单说明:


socket的创建使用SOCKET,


socket的的地址空间创建采用socketaddr_in


bind()服务端用来绑定端口


Listen()侦听模式


accept()接受服务


send()发送数据


recv()接收数据


connect()客户端连接服务器

socketaddr_in的数据结构如下:

/*struct sockaddr

{

//地址族,2字节

unsigned short sa_family;

//存放地址和端口,14字节

char S_un.S_addr[14];

}

struct sockaddr_in

{

//地址族

short int sin_family;

//端口号(使用网络字节序)

unsigned short int sin_port;

//地址

struct in_addr sin_addr;

}

*/

该数据winsock2,已经定义好无需二次定义,博主给出仅供参考方便编程理解。

服务端代码实现

#include

#include

#include

#pragma comment(lib,"ws2_32.lib")

int main(int argc,char* argv[])

{

//初始化

WSADATA wsa_data;

if(WSAStartup(0x202,&wsa_data)!=0)

{

return 0;

}

//创建套接字

SOCKET server_Listen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(server_Listen == INVALID_SOCKET)

{

printf("socket error !");

return 0;

}

//绑定IP和端口

sockaddr_in server_socket;

server_socket.sin_family = AF_INET;

server_socket.sin_port = htons(8888);

server_socket.sin_addr.S_un.S_addr = INADDR_ANY;

if(bind(server_Listen,(LPSOCKADDR)&server_socket,sizeof(server_socket)) == SOCKET_ERROR)

{

printf("bind error !");

}

//开始监听

if(Listen(server_Listen,5) == SOCKET_ERROR)

{

printf("Listen error !");

}

//创建客户端套接字

SOCKET clIEnt_socket;

sockaddr_in clIEnt_addr;

int clIEnt_addr_len = sizeof(clIEnt_addr);

char rev_data[255];

//循环接收数据

while (true)

{

printf("nWait connect...n");

clIEnt_socket = accept(server_Listen,(SOCKADDR *)&clIEnt_addr,&clIEnt_addr_len);

if(clIEnt_socket == INVALID_SOCKET)

{

printf("accept error !");

continue;

}

printf("nClIEnt IP: %sn",inet_ntoa(clIEnt_addr.sin_addr));

//接收数据

int ret = recv(clIEnt_socket,rev_data,255,0);

if(ret)

{

rev_data[ret] = '';

printf(rev_data);

}

//回送数据

const char * send_data = "Hello! TCP_CLIENT!n";

send(clIEnt_socket,send_data,strlen(send_data),0);

//关闭套接字

closesocket(clIEnt_socket);

}

//关闭侦听套接字

closesocket(server_Listen);

//关闭初始化服务

WSACleanup();

return 0;

}

4.客户端代码实现

#include

#include

#include

#pragma comment(lib,&wsa_data)!=0)

{

return 0;

}

//创建套接字

SOCKET clIEnt_socket = socket(AF_INET,IPPROTO_TCP);

if(clIEnt_socket == INVALID_SOCKET)

{

printf("socket error !");

return 0;

}

//绑定IP和端口

sockaddr_in server_socket;

server_socket.sin_family = AF_INET;

server_socket.sin_port = htons(8888);

server_socket.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if(connect(clIEnt_socket,sizeof(server_socket)) == SOCKET_ERROR)

{

printf("conect error !");

return 1;

}

printf("connect suceessfullyn");

char send_buff[255];

char rec_buff[255];

while(true)

{

printf("input message:");

scanf("%s",send_buff);

send(clIEnt_socket,send_buff,sizeof(send_buff),0);

if (strcmp(send_buff,"exit")==0) break;

rec_buff[0] = '';

int data_len = recv(clIEnt_socket,rec_buff,0);

rec_buff[data_len]='';

printf("n%sn",rec_buff);

}

closesocket(clIEnt_socket);

WSACleanup();

return 0;

}

补充

dev直接运行会报错


需要手动添加配置文件:


“工具”–>“编译选项”–>“编译器”–>添加“-lwsock32”–>勾选,保存

标题

效果演示



附上编译器生成的exe,需要的留邮箱。

总结

以上是内存溢出为你收集整理的C语言基于socket-实现客户端-服务端通信全部内容,希望文章能够帮你解决C语言基于socket-实现客户端-服务端通信所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存