说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于CAsyncSocket::Receive()的问题?

编辑:说三道四文库 发布时间:2018-06-18 06:25
HTML文档下载 WORD文档下载 PDF文档下载
问题如下:

将文件分批先写入缓冲区,再用socket的sent发送,客户端用receive收

在localhost中发送一个300k的文件怎么都不会出错,可上局域网却会错少数几个文件包,

用if (nReceived!=SOCKET_ERROR) 却不会发现错误,这是怎么回事?请大家给予帮助

谢谢了!
你是怎么收的?
你是不是说发送一次却接收多次的意思啊?我遇到过这种情况。

在客户端接收之前加上:
m_ClientSocket->AsyncSelect(0);
m_ClientSocket->AsyncSelect(FD_CLOSE);

to laiping(长夜漫漫,无心睡眠) 
呵呵,不大懂,这是为了什么?
当onreceive()触发时,就receive,再往缓冲里写


目前是发送的都可以收到(数量丝毫不错),但就是有错
1。判断文件尾了么?
2。检查每次收到的数量了么(不一定和每次发送的一样多)?

呵呵,我是新手,只能想到这些。
2。检查每次收到的数量了么(不一定和每次发送的一样多)?


好象有道理?

哦,是这样的?
发送方如果每次发1k,接受方每次收到的很可能小于1k。
哈哈,我在这里犯过错误的。
关注!1
  我每次送512 个字节
  nReceived=m_sConnectSocket.Receive(pBufr,512);

  nReceived 如果不是512 是不是就错了?

  谢谢
  
那并不是错误,很正常。
所以要作判断,然后作相应的处理。
我刚刚试验的结果是,再localhost 下发送,文件完好无缺地收到了(经过比较)

而nReceived 总不是512 
啊?所以我问你是怎么接收的。
判断接收时出现的错误是不是阻塞模式?
是的话可以做个延迟处理。
或者判断一下发送时是否有错误?
我腿!!!
newlearner(阿杨) :
用 nReceived=m_sConnectSocket.Receive(pBufr,512);收下后,再写入缓冲,知道server端发完(文件尾)再一次写入client文件

laiping(长夜漫漫,无心睡眠):
是不是这个东东:  WSAEWOULDBLOCK

唉,谢谢大家帮忙

是啊,查查帮助怎么用。
/*我刚刚试验的结果是,再localhost 下发送,文件完好无缺地收到了(经过比较)*/

对不起,错误试验!

好象有结果了...且听下回分解

这个问题解决了,现在基本可以用了,但是一上MODEM 传输就出错;

又有新问题,请大家看看我的新帖子,提供宝贵思路,谢谢
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘