1. 客户端或服务器端如何知道对方已经关闭连接?
    2. 客户端连续两次发送一些数据,服务器端接收时是从同一个队列中接收,并不能区分是两次发过来的,这种情况应该怎么处理?
    3. 在异步操作时,一般调用异步操作方式还是自己开一个线程(不用线程池)好?

解决方案 »

  1.   

    IsClose() 可以判断是否关闭自已定义一个传输协议 自己做个判断异步跟多线程本质上应该一样的
      

  2.   

    第2,3两个解决了,但用IsClose判断似乎有点问题例如
    try
    {
        while (socket.connected)
        {
           count=tcpListener.Receive(...)
        }
    }
    代码会阻塞在count=tcpListener.Receive(...)行,只要客户端一强行关闭,立即产生异常。难道还非得结合异常来判断?
      

  3.   

    Receive方法本身就是阻塞的,通常来说,你需要知道你将要接收多少长度的字节,然后Receive多少,需要自己定义好协议,比如定义一个定长的消息头,消息头告诉你消息体有多长。需要关闭的时候不Receive就行了。
      

  4.   

    建议:在两种环境(代理和非代理)中通过抓包看看http头中的数据有哪些不同。相信这是最快的解决办法
      

  5.   

    lz的www_123du_com(鼠·神·泪)(www.123du.com)这为朋友 似乎已经给出答案了
      

  6.   

    客户端与服务器端之间自定义协议,即发送端在发送包中用1个或几个bit来描述该包中数据大小, 如www_123du_com(鼠·神·泪)所说的已经可以解决问题了