加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 学习资料

C语言 socket 编写简单服务端客户端通信问题

时间:2021-03-21 20:25:12  来源:  作者:
大家好,感谢你的回复。
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
Talk is cheak , show me the code.
服务端代码:
  1. #include<stdlib.h>
  2. #include<WinSock2.h>
  3. #pragma comment(lib,"ws2_32.lib")
  4. int main(){
  5.     WSADATA wsd;
  6.     SOCKET sockServer;
  7.     SOCKADDR_IN serveraddr;// 服务端套接字   该结构中包含了要结合的地址和端口号
  8.     SOCKET sockClient;
  9.     SOCKADDR_IN clientaddr;
  10.     WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
  11.     sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
  12.  
  13.  
  14.     if (sockServer != -1 && sockServer != INVALID_SOCKET){
  15.         printf("Socket has been created :%d", sockServer);
  16.     }
  17.     else{
  18.         printf("Socket create failed.");
  19.         exit(0);
  20.     }
  21.     serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  22.     serveraddr.sin_family = AF_INET;
  23.     serveraddr.sin_port = htons(6000);//绑定端口6000
  24.     int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
  25.     char recvBuf[100];
  26.     int len = sizeof(SOCKADDR);
  27.     listen(sockServer, 5);//5为等待连接数
  28.     while (1){
  29.         sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
  30.         //接收客户端数据
  31.         recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
  32.         printf("to me:%s\n",recvBuf);
  33.         memset(recvBuf, 0, 100);
  34.     }
  35.     closesocket(sockClient);
  36.     system("pause");
  37.     return 0;
  38. }
复制代码
客户端代码:
  1. #include<winsock2.h>
  2. #include<stdio.h>
  3. #pragma comment(lib, "ws2_32.lib")
  4. void main()
  5. {
  6.     WSADATA wsaData;
  7.     SOCKET sockClient;//客户端Socket
  8.     SOCKADDR_IN addrServer;//服务端地址
  9.     WSAStartup(MAKEWORD(2, 2), &wsaData);
  10.     char message[20] = "HelloSocket!";
  11.     //定义要连接的服务端地址
  12.     addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
  13.     addrServer.sin_family = AF_INET;
  14.     addrServer.sin_port = htons(6000);//连接端口6000
  15.     //新建客户端socket
  16.     sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  17.     int s = 0;
  18.     s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
  19.  
  20.     while (1){
  21.         //发送数据
  22.         int a = send(sockClient, message, strlen(message) + 1, 0);
  23.         printf("to server:");
  24.         scanf("%s", message);
  25.  
  26.     }
  27.     //关闭socket
  28.     closesocket(sockClient);
  29.     WSACleanup();
  30. }
复制代码
求懂的高手来解答一下。
谢谢了!
 
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
实现php间隔一段时间执行一次某段代码
实现php间隔一段时间
相关文章
    无相关信息
栏目更新
栏目热门