我向服务器发送信息,然后启动一个线程用socket来等待服务器返回信息,等这时假如服务出问题,没有发回信息,这个线程就永远不会停止。大家是怎么解决这个问题呢。

解决方案 »

  1.   

    1. 通过socket的是否出现异常来判断,对方是否已经关闭。
    2. 超时关闭。
      

  2.   

    加一个超时代码:OutTime("时间")
      

  3.   

    在线程里加一个超时的异常判断,
    我不知道,你用的是不是TcpClient,TcpClient类里有一个.ReceiveTimeout 属性 等待的时间tcpClient.ReceiveTimeout = 5;if (tcpClient.ReceiveTimeout == 5)
         Console.WriteLine("The receive time out limit was successfully set " +
         tcpClient.ReceiveTimeout.ToString());
      

  4.   

    呵呵,正解.  加入TimeOut.不過我想問一下,到底是用Vb或Delphi寫的Winsocket程序好,還是用c#的Net.Socket好!主要是性能:如CPU, 內存, 及運行速度問題.
      

  5.   

    这个问题刚进行了一个大探讨.可以参考一下.
    http://community.csdn.net/Expert/topic/4660/4660832.xml?temp=.6758692
      

  6.   

    搂住的意思是客户端和服务器已经连上了?那么TCP连接的接收端回报异常(接收信息的函数是阻塞的),根据异常结果可以判断出事什么情况的    如果是客户端要连接服务器,而服务器没开起,也会出异常的
      

  7.   

    我从《C#.net网络核心编程》上看的(FTP协议开发中):
       做一个循环,循环次数为n,
       每次检查服务器返回信息,
       如n次都没返回,则退出该线程。
      

  8.   

    我记得里面专门有个函数可以判断socket连接是否意外的吧?
    还是顶~呵呵
      

  9.   

    异常加时间 判断
    if waiterTime>5 then
    try
    ……
    catch 
    ……
    finally
    结束线程
    end try