求助:客户端(clientSocket)以线程形式读取文件并发送数据包到服务端(serverSocket),服务端收不到全部包的数据?都是非阻塞模式。(200分

  • 主题发起人 主题发起人 netrin
  • 开始时间 开始时间
N

netrin

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端使用ClientSocket,非阻塞模式
服务端使用ServerSocket,非阻塞模式

客户端开辟一个线程,线程读取1个大文件(如5M),数据包缓冲长度6K,发向服务端,中间没用延时(如sleep),直接是读取文件然后就发包,速度很快。

服务端read里面,接收到的数据缓冲总数<>客户端发来的总数,查了一下sendbuf的返回值,在50几的时候,就返回-1了,表明未发送成功。

很是不解?希望哪位朋友说说,谢谢。
 
阻塞就索酱紫
 
ns:=send(s,buffer,nsendlen);
ns<0 则sleep(1)然后重新发送
ns<nsendlen 则buffer中的数据没有发送完,sleep(1)然后把没发完的数据重新发送

如果sleep(1)后仍然发送失败则继续slee(1)~~不断尝试直到发送成功~~~
当然~~循环中要检查连接时候已经断开~~
如果已经断开~~~就出错了~~~要退出循环~~~
 
ns:=send(s,buffer,nsendlen)
ns=-1,也就是SOCKET_ERROR时,用WSAGetLastError检查一下错误代码。如果是WSAECONNRESET或WSAECONNABORT,说明连接中断了。
 
后退
顶部