C++socket编程(三):3.6 服务端recv客户端发送的数据

服务端中获取客户端发送过来的数据一定是关闭套接字之前进行,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);

实验演示:
服务端:
在这里插入图片描述
客户端:
在这里插入图片描述
二:服务端循环接收客户端的数据
将上面的代码进行调整,比如说我们收到用户发一个quit之后我们再退出,不然我们就一直接收用户信息
如下代码:

for (;;)
	{
		int recvlen = recv(client, buffer, sizeof(buffer) - 1, 0);  //第四个参数这个0是flag和系统相关,有很多自定一的操作,我们这边0就是不对他设置

		if (recvlen <= 0)
			break;
		buffer[recvlen] = '\0';
		if (strstr(buffer, "quit") != NULL)
			break;
		printf("recv %s\n", buffer);
	}

演示:
服务端
在这里插入图片描述
客户端:
在这里插入图片描述


版权声明:本文为weixin_43907175原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。