服务端中获取客户端发送过来的数据一定是关闭套接字之前进行,close之后就收不到数据了。
一般读取数据一般用read,windows上一般用recv(本质上也是read),但是为了跨平台,所以一般用revc。
如下代码
sockaddr_in caddr;
socklen_t len = sizeof(caddr);
int client = accept(sock, (sockaddr*)&caddr, &len);//创建一个新的socket,用来与客户端单独进行通信
printf("accept client %d\n", client);
char* ip = inet_ntoa(caddr.sin_addr);
unsigned short cport = ntohs(caddr.sin_port); //将网络字节序转化为本地字节序
printf("client ip is %s,port is %d\n", ip, cport);
char buffer[1024] = { 0 };
int recvlen = recv(client, buffer, sizeof(buffer)-1,0); //第四个参数这个0是flag和系统相关,有很多自定一的操作,我们这边0就是不对他设置
printf("recv %s\n", buffer);
closesocket(client);
实验演示:
服务端:
客户端: