网络编程:流式套接字应用数据完整包读取问题

本文接着上篇分包收包问题隶属同一个问题。今天刚遇到的问题并解决了,TCP协议传输,流式套接字编程,收取网络数据时,从缓冲数据中读取出应用层完整包,原来没有单个固定头长度的数据包取出bug表现,现在后来加入一个只有头的报文进入,于是整个取包就出现混乱。完整性再一次无法愈合。现在重新整理取包流程。msglen = recv(s, buffer, sizeof(buffer), 0); buf4packet 为存储完整数据包的临时数据缓冲区
while(msglen>0)
{
	{
		int len,szcpy;
		len = (offset < sizeof(COMM_HEAD) ? sizeof(COMM_HEAD): ((COMM_HEAD*)buf4packet)->msg_len);
		szcpy = len - offset;
		szcpy = (msglen > szcpy ? szcpy:msglen);

		memcpy(buf4packet + offset, buffer2, szcpy);
		offset += szcpy;
		buffer2 += szcpy;
		msglen -= szcpy;
		if (offset < sizeof(COMM_HEAD)) continue;
		len = ((COMM_HEAD*)buf4packet)->msg_len;
		if (offset <len) continue;
		if (offset !=len)
		{
			xlog_out(LOG_COM,P_FATAL,"message_recv occur an error on packet completeness analyse!\n");
			close(s);
			break;
		}
	}
	offset = 0;

	COMM_HEAD* msg_p = NULL;
	msg_p = message_parse(buf4packet);
	if (msg_p != NULL)
	{
	……
	}
	……
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值