C++ Socket网络编程1.2版本 网络报文结构消息头的DataLength的作用

本文探讨了在C++ Socket编程中,DataLength字段在固定长度报文结构中可能作用较小,但在处理变长数据如图片文件传输时,DataLength用于指示数据的大小,对于正确接收和发送至关重要。文中介绍了如何改进服务端和客户端的收发逻辑,以利用DataLength进行有效通信。
摘要由CSDN通过智能技术生成

List item
在当前的版本中,服务端和客户端的收发报文都是 固定长度的数据 且是在本地网络运行,因此粘包和少包的情况还未出现。
那么dataLength的作用在目前版本中的作用很小。
但当网络收发数据是变长数据的时,例如发送的是图片文件,dataLength的作用是告知收发文件的大小。本节对服务端和客户端的收发逻辑进行简单改进,以使用dataLength提供的长度进行收发。

对服务端的收发逻辑做如下更改:

	while (true)
	{
		//使用一个缓冲区接收数据 暂定最大收发1024个字节		后续会改进大文件的传输
		char *szRecv = new char[1024];

		//5 首先接收数据包头
		int nlen = recv(_clientSock, szRecv, sizeof(DataHeader), 0); //接受客户端的数据 第一个参数应该是客户端的socket对象
		if (nlen <= 0)
		{
			//客户端退出
			cout << "客户端已退出,任务结束" << endl;
			break;
		}
		DataHeader* header = (DataHeader*)szRecv;
		switch (header->cmd)
		{
			case CMD_LOGIN:
			{
				Login* _login;
				//读取Header->dataLength的数据长度
				recv(_clientSock, szRecv + sizeof(DataHeader),header->dataLength - sizeof(DataHeader),0);
				_login = (Login*)s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值