我自己写了个基于TCP的文件传输程序(用了两个线程)主线程是服务器端(接收方),当对话框初始化后就阻塞在accept上了,等待连接请求。另一个线程是客户器端(发送方)。
发送方:
while(feof(pfile))
{
connect();
send();
.....
}
接收端:
while(true)
{
m_acceptsoc=accept();
recv(m_acceptsoc,recv_buf....);
.....
}
通过跟踪调试发现:
发送方式一次性全部读完文件,直到文件结尾,但是接收端只收到一次?并不是想象中的send->recv->send....这样的?
怎么样才能实现文件的有序传输(send->recv->send....)?
发送方:
while(feof(pfile))
{
connect();
send();
.....
}
接收端:
while(true)
{
m_acceptsoc=accept();
recv(m_acceptsoc,recv_buf....);
.....
}
通过跟踪调试发现:
发送方式一次性全部读完文件,直到文件结尾,但是接收端只收到一次?并不是想象中的send->recv->send....这样的?
怎么样才能实现文件的有序传输(send->recv->send....)?
比如某个文件长度为100,N次发送出去有两种方式,一种是已知文件长度,另外一种是receive返回值为空,则判断套接字缓存已无东西。单独一次的send的长度,不一定等于receive的长度所以,send->receive->send->recieve这种逻辑本身就是错的。应该为:send...send...
receive...receive其中,当send的累计长度等于receive的长度时,才表明发送的内容已被完全接收。希望对楼主有帮助。