请问在vc socket中,有什么办法可以让recv返回0值吗?

一个阻塞的tcp/ip文件传输程序,当我发送端read()为0时退出发送函数模块,send()函数也正常返回0了,但是接收端一定要等到发送端的closesocket()函数运行完之后recv()函数才返回0,否则就一直卡在recv()那里。求用什么办法可以在不关闭接收端socket的情况下recv正常返回0好让我的程序正常退出?
我做一个多文件的网络传输,用阻塞式的TCP/IP套接字,请问怎么用select()函数判断每次发完一个文件再发另外一个?现在的问题很令人痛苦,接收端每次都不能正常返回,要不然就是recv()卡住,要不然就是send那边把其他文件的字节也传到recv端第一个文件里面。

波斯汪
浏览 450回答 3
3回答

白猪掌柜的

首先可以将RECV函数设置为非阻塞模式。这个就不多说了。对于另一个问题,发送端每次发送的字节数要和接收端每次接收的内容大小一致。比如接收端每次收4K,发送端也必须是每次发4K,如果发送的内容实际小于4K,就用空字符补。

繁星点点滴滴

你可以用异步的IO模式,比如select模式,overlappped模式,事件模式,甚至IOCP。这样就不会存在recv被卡住的问题了,性能也极大的提高。同步的recv返回0,表示连接正常关闭, 你想让recv返回0却保持连接这是很难的。

汪汪一只猫

用select测试.select功能很强, 但用起来有点复杂, 很多人说它不好用, 其实是不会用, 希望你别说它不好用.======================================================不论是不是Blocking模式, select都可以用来检测:1)连接是否成功;2)是不是可以发送;3)是不是可以接收;4)对方是否断开连接====================================================="send那边把其他文件的字节也传到recv端第一个文件里"你的程序设计的问题, 和socket怎么用无关.
打开App,查看更多内容
随时随地看视频慕课网APP