问题、特殊处理问题?
以下各种情况会偶尔出现,请问高手,你们是如何处理的?
A、在用户端发送大数据时(假如1G文件),在数据发送中途用户终止发送,该消息是通过同一个socket发送到服务器的吗?还是要有另外的传输路径?
B、接上题:如果服务器端再给用户端传输大数据时,需要终止传输,该消息是通过同一个socket发送的吗?还是要通过另外的途径?
C、假设能使用一个套接字处理A、B情况,那么发送的消息将可能会发生粘包情况,接收方得到信息是其后的xxxx字节都是文件数据,而在其中夹杂着一个必须处理的消息,接收方如何解析这种情况?
D、在用户端上传大数据过程中(2G),如果这时服务器传来一个通知消息(假设是“服务器即将关闭...”),由于套接字忙于for(){send();}数据,他能实时收到该消息吗?如果能是不是要开一个接收线程实时监视接收缓冲区并且要使用2个套接字(send占用一个)?
E、在IOCP服务器设计中,必须要求用户端使用一个套接字吗?如果不是,我觉得多套接字非常难以管理!!如果是的话,如何处理D问题?F、对于服务器与用户端通讯
   比如:用户端信息:1、终止发送数据
                     2、终止接收数据
                     3、15包接收失败
                     4、......
         服务器端消息:1、服务器即将关闭
                       2、服务器终止发送数据
                       3、服务器终止接收数据
                       4、.....,.
双方发送这样的必须处理的消息,需要另外的途径吗(使用多个socket)?还是一个socket即可?对于夹在数据中的这类消息,如何提取出来解析(在发生粘包的情况下,如何确定该数据是消息还是正常数据?)

解决方案 »

  1.   

    这跟iocp没关系..
    你就是用select 也必须解决这些问题
      

  2.   

    我并不是要大家给我源码,我仅仅是想走一点捷径,最近有点时间,想写个IOCP服务器,对有些问题非常纠结,所以希望成功做过项目的人给些提示,比如,
    1、如果有好的包解析算法和消息应答协议,是不是可以仅仅使用一个SOCKET即可(我觉得可以);
    2、用户端不使用IOCP的情况下,不开多线程是不是能解决上面这些问题(同时收发数据)(我觉得不行);
    我知道对一个问题有许多解决办法,我只是让大家告诉我哪种方式可行,要是多种方法都可行,开发难度如何?对于上面的问题,我归结为(1,2个问题),并且按我目前的了解给出了答案,请高手回答是否正确?另外,一直有一个问题没有从原理上弄清楚,说明如下,请高手详细解惑1个客户端MA使用一个线程收发网络数据
    服务器端2个工作线程(N1/N2),负责网络数据收发,其他忽略
    某个时间里,假设MA要发送了一个数据包
    MA:abcdef     问题X:假设N1接收了abcd,N2接收了ef在写入缓冲区的时候,N1慢了一拍,结果是efabcd这样的乱序,实际测试时,没有发生这样的情况,为什么不会乱序,能找到的解释,我觉得都不合理
    解释如下:在N1写入缓冲区后在发出下一个WSARecv,我觉得不合理的地方是:这样的话,所有来自MA的数据都应该由N1,因为N1目前没有任务了,根据IOCP的工作原理,后面的MA数据必须由N1来接收,但是在实际测试中发现,来自MA的数据,会被2个线程甚至多个线程同时接收;请大家回答 1,2 X3个问题,以前问题作废
      

  3.   

    个人觉得lz问题问的太早,lz应该首先做个基本iocp网络服务程序进行测试和调试,从中了解基于完成端口网络数据服务的处理原理和实际应用方式,在熟练掌握后再做lz上面提到的问题。其实真到此时,我想lz就不会再提这种问题了。
    另外,http://www.codeproject.com上有不少参考资料,可以去搜索查询。