日期:2014-05-17  浏览次数:20869 次

网络通讯问题不解,请高手指点,在线等,分不够说,开贴给,只要你回答满意
1、在C/S中,一般是Client发送数据岛服务器,服务器开一个线程处理数据,现在的问题是:
假设在正常通讯的过程中,突发客户端掉电事故,服务器端的线程如何能快速得知并且关闭自己,
要考虑到网络堵塞、数据延时发送的情况,在这种情况下,就不要终止服务器线程,服务器端锄禾区别处理这样的问题?

2、假设在一个C/S结构中,在C端的一个程序发送了2个请求A,B(send(我要下载文件)),
  服务器端开2个线程处理2个请求(下载a1,a2两个文件),由于C/S通讯使用的是一个端口
  所以2个文件的数据都是从一个指定的端口发送到客户端,假设A接收a1文件,B接收a2文件,那么,会不会发生
  这样的混乱:A在接收a1的过程中,由于在端口处同时也过来a2的数据,而将a2的数据接收过来作为a1的数据,同时B也会接收a1的数据
  如果不会请说明理由,如果会,请指定在真实的server中的解决办法,谢谢
3、在B/S中,通讯时通过80端口进行的,假设我同时打开20个各不相同的页面,IE是如何区别各自不同的数据来源的(与2问题相似)
4、既然所有的通讯都可以通过一个端口来进行(如问题3),那么为什么各个不同的程序要开不同的端口处理数据呢,具体的说,为什么
  C/S或其他的通讯程序(网络游戏)要开新端口,公用一个80就可以了啊!!!

------解决方案--------------------
1、客户端关掉了,不能够关闭服务器,除非是一对一的服务,感觉也没有必要关闭服务器;
2、如果不做什么处理,肯定会混乱的,包括粘包的问题,所以在发送文件时,最好把文件分包,带上标识,在客户端再根据标识分别组成文件,服务端不有必要用两个线程来处理两个文件的发送,完全可以发完一个文件再发另一个文件
3、4、不做回答;好好看看网络相关的理论书吧;
------解决方案--------------------
1、客户端异常关闭,并不会影响服务端,如果数据包发送完毕,服务端依然会正常执行。断点不同于关机,关机之前还可以发送关闭请求,断电无法实施知晓。服务端做好数据记录,数据包不完整不做处理就行。
2、服务端在接受请求的时候创建不同的Socket对象和标识,然后把处理方法加入线程池中是不会产生混乱的
3、正如lz所言,同二,20个浏览器每个请求都有自己单独的Socket对象和标识,自然知道如何区分了
4、不太清楚lz所谓的不同程序是指什么,个人理解,多种不同类型操作的程序如果公用一个端口,在接收请求处理的时候就需要添加不同的判断,以分辨是什么程序发送的请求。如此,反而让系统变的繁琐,倒不如不同程序监听不同端口来的实在。不同端口对应不同程序,编码和管理也相应简化许多
------解决方案--------------------
IE是如何区别各自不同的数据来源的

---------------------

去看看 http传输协议
------解决方案--------------------
TCP/IP协议的基本传输单位是数据包(datagram),TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方,如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。