例如:主机发送命令给客户端,但是客户端却因为网络不通或者没有启动程序而长时间没有响应.这时希望主机在规定时间内自动关闭socket连接.不要出现-----主机再次发送命令,出现"套接字端口只能调用一次"的提示-----------的问题

解决方案 »

  1.   

      socket   =   new   Socket(hostEP.Address.AddressFamily,SocketType.Stream,ProtocolType.Tcp);   
      socket.SetSocketOption(SocketOptionLevel.Socket,   SocketOptionName.SendTimeout,   3000);   
      socket.SetSocketOption(SocketOptionLevel.Socket,   SocketOptionName.ReceiveTimeout,   3000);
      

  2.   

    socket.SetSocketOption(SocketOptionLevel.Socket,  SocketOptionName.SendTimeout,  3000);  
      socket.SetSocketOption(SocketOptionLevel.Socket,  SocketOptionName.ReceiveTimeout,  3000);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~谢谢,这两句意思就是当发送端或者接收端超过三秒未见连接信号就自动断开socket吗?
      

  3.   

            这种方法只对同步的通信有用,意思是你理解的那样,还有种方法是使用心跳包来检测
    类似代码如下uint dummy = 0;
                        byte[] btOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
                        BitConverter.GetBytes((uint)1).CopyTo(btOptionValues, 0);
                        BitConverter.GetBytes((uint)5000).CopyTo(btOptionValues, Marshal.SizeOf(dummy));
                        BitConverter.GetBytes((uint)5000).CopyTo(btOptionValues, Marshal.SizeOf(dummy) * 2);clientSocket = stServer.Accept();        //在接收前赋值                    clientSocket.IOControl(IOControlCode.KeepAliveValues, btOptionValues, null);    //加入                     clientService = new Thread(new ThreadStart(ServiceClient));  //创建新线程服务客户端
                        clientService.IsBackground = true;
                        clientService.Start();
      

  4.   

    http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.setsocketoption(vs.71).aspx