vs2015 mfc 套接字 连续多次send后,recv数据问题

weixin_44690344 2019-04-19 05:34:56
各位大神,请指教!
VS2015,MFC,C++,用AfxSocketInit()函数加载的套接字,用socket()函数创建套接字,TCP形式
确认服务器与客户端连接成功以后,服务器向客户端发送数据,进行以下实验:

实验1:
步骤1:客户端执行recv(SockClient, recvtext1, 100, 0)函数,执行后,进入阻塞。
步骤2:服务端执行int abc1 = send(sockConn, sendtext1, strlen(sendtext1)+1 , 0)函数,执行后,步骤 1中的recv函数解除阻塞,recvtext1中内容与服务器的发送数据一致。
步骤3:客户端执行recv(SockClient, recvtext2, 100, 0)函数,执行后,进入阻塞。
步骤4:服务端执行int abc2 = send(sockConn, sendtext2, strlen(sendtext2)+1 , 0)函数,执行后,步骤 3中的recv函数解除阻塞,recvtext2中内容与服务器的发送数据一致。
结果:数据正常。

实验2:
步骤1:服务端执行int abc1 = send(sockConn, sendtext1, strlen(sendtext1)+1 , 0)函数,执行后,abc1 为5,与发送数据量一致,表示发送成功。
步骤2:客户端执行recv(SockClient, recvtext1, 100, 0)函数,执行后,recvtext1中内容与服务器的发送 数据一致。
步骤3:服务端执行int abc2 = send(sockConn, sendtext2, strlen(sendtext2)+1 , 0)函数,执行后,abc2 为5,与发送数据量一致,表示发送成功。
步骤4:客户端执行recv(SockClient, recvtext2, 100, 0)函数,执行后,recvtext2中内容与服务器的发送 数据一致。
结果:数据正常。

实验3:
步骤1:服务端执行int abc1 = send(sockConn, sendtext1, strlen(sendtext1)+1 , 0)函数,执行后,abc1 为5,与发送数据量一致,表示发送成功。
步骤2:服务端执行int abc2 = send(sockConn, sendtext2, strlen(sendtext2)+1 , 0)函数,执行后,abc2 为5,与发送数据量一致,表示发送成功。
步骤3:客户端执行recv(SockClient, recvtext1, 100, 0)函数,执行后,recvtext1中内容为服务器第一次 发送的数据,即sendtext1。
疑问:为什么接收到的内容不是sendtext1+sendtext2?为什么sendtext2被丢弃了?在哪个环节出的问题,如 果想在步骤3中收到sendtext1+sendtext2(即多次send,1次recv时)应该怎么改?
...全文
172 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44690344 2019-04-19
  • 打赏
  • 举报
回复
刚才试了一下,如果发送端这么写: char sendtext1[]="se\0nd1"; int abc1=send(sockConn,sendtext1,strlen(sendtext1)+1,0); 那么执行此处的send后,abc1为3,即发到\0时就认为结束了!把后面的nd1丢弃了,请问大神怎样才能把这个字符串发送完整?
weixin_44690344 2019-04-19
  • 打赏
  • 举报
回复
如果send的字节数(第三个参数)与发送内容一致的话,就不会出现实验3中的问题,两次send后再recv时,收到的数据是前两次之和;如果send的字节数(第三个参数)大于发送的内容时,就会出现实验3的现象!请大神指点一下!感激!

4,358

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧