您当前的位置 :首页 > 学习资料 > C语言 socket 编写简单服务端客户端通信问题
投稿

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

2021-03-21 20:25:12 来源: 作者: 责任编辑:cncml

大家好,感谢你的回复。
我用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. }
复制代码
求懂的高手来解答一下。
谢谢了!
 
文章来源: 责任编辑:cncml
版权声明:
1、本主题所有言论和图片纯属会员个人意见,与本网站立场无关
2、本站所有主题由该文章作者发表,该文章作者与享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文
不良信息举报信箱 新闻热线:18733599993 技术服务:18733599993 网上投稿
关于本站 | 广告服务 | 免责申明 | 招聘信息 | 联系我们
在线网 版权所有 Copyright(C)2005-2025