想设计一个任意输入一个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);
}
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);
}
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");
}
但也有人说那样可以,不清楚,你也可以试试。但上面的代码我正在用,1s后就响应了