想设计一个任意输入一个IP地址,然后Client端用与之通信。由于输入的IP地址可以不是当时主机的IP,所以此时socketExpection,但是发现通过这个判断时响应速度相当慢,不知道有没有什么快点方法。我现在的这块代码如下:
 Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                        IPAddress adr = IPAddress.Parse(ip);
                        IPEndPoint ep = new IPEndPoint(adr, 6000);
                
                        try
                        {
                            server.Connect(ep);                        }
                        catch (SocketException se)
                        {
                            
                            if (se.ErrorCode == 10061)
                                MessageBox.Show("Please run host first!");
                            else if (se.ErrorCode == 10060)
                                MessageBox.Show("Can't find the IP address!");
                            else
                                MessageBox.Show(se.Message);
                        }

解决方案 »

  1.   

    是这样的,由于不用的用户可能在用的所连接的IP不一样,所以在连接之前让用户输入自己的IP,
      

  2.   

     TcpClient tcpClient = new TcpClient();                        bool connflag = false;
                            if (!tcpClient.Connected)
                            {
                                try
                                {
                                    IAsyncResult result = tcpClient.BeginConnect(ip, 6000, null, null);                                connflag = result.AsyncWaitHandle.WaitOne(1000, true);//连接超时1秒如果1S内无返回则认为连接失败,connflag为false,如果有返回则为true。
                                }
                                catch (Exception ex)
                                {
                                    
                                    MessageBox.Show(ex.Message);
                                    connflag = false;
                                }
                            }
                            if (!tcpClient.Connected)
                            {
                                MessageBox.Show("An invaliabe IP address!");
                            }
                            else
                            {
                                MessageBox.Show("OK");
                             }
      

  3.   

    在网上还有看到说用sock.setsockoption,不过我试了没效果
    但也有人说那样可以,不清楚,你也可以试试。但上面的代码我正在用,1s后就响应了