您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> sock发送文件的几点疑问?

sock发送文件的几点疑问?

来源:网络整理     时间:2016/8/6 10:05:22     关键词:

关于网友提出的“ sock发送文件的几点疑问?”问题疑问,本网通过在网上对“ sock发送文件的几点疑问?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: sock发送文件的几点疑问?
描述:

1、如果发送端用while(1)循环,也就不顾客户端的感受,拼命的发,进度条很快就完成了,但实际情况可能网络问题,客户端收得很慢,类似于QQ,它是用应答式交互,还是while(1)收发呢?
2、如果同时发三个文件(同时有进度),是不是要建立三个socket连接?三个线程分发呢?
3、发送以结构方式发数据,接收方有时“粘包”了,用什么方式把他们分开呢?最好能给点源码?


解决方案1:

用TCP的方式发送,采用应答式传输应该不会出现上面的问题,我传输文件也是用的TCP协议

解决方案2:

1、如果用WHILE(1)发的话,就像你所说的,会粘包,系统会将你发送的数据先放在缓冲区,然后到达一定大小时(好像是4K,记不太清楚)。一起发送出去。关于QQ,应该是应答方式,因为用的是TCP协议,TCP协议本身就是一种交互式T协议,如果数据不不想安全到达对方,会出错的。
2、最好建立三个连接,也可以三个进程共享同一个连接(我没做过,书上说可以,但不推荐使用)。
3、关于粘包现象有二种解决方法,一种是采用在尾部加分割符,别一种是方法可以让系统直接发送,设置如下:
服务器端的ONCONNECT消息中 加上以下代码:(这个消息自定义)
CMySock *clskt=new CMySock(this);
BOOL b=0;
clskt->SetSockOpt(TCP_NODELAY,&b,sizeof(BOOL),IPPROTO_TCP);
CMySock *(wparam)->Accept(*clskt);

解决方案3:

1.即使while(1)循环发送,也要按照接收方进度进行(看一下TCP的窗口机制--未能及时处理的数据在缓冲区填满后会禁制发送方数据传送的);
2.如果你的连接是1-1的,最好还是分先后传送;如果需要完成同步进行的话,要建立3个socket(其实效率并没有提高多少);
3.“粘包”问题可以先做好一个声明,比如每个独立数据传输完成,在末尾加"$",用这样的方式进行区分也可以处理“粘包”造成的影响.

解决方案4:

第3个问题我也碰到了,可是一直没有解决,郁闷呀

解决方案5:

楼上:解释很正确!

解决方案6:

1、腾讯没有说是应答方式还是WHILE发送.
2、要同时,也只好这样了.
3、.


以上介绍了“ sock发送文件的几点疑问?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3137356.html

相关图片

相关文章