在测试我的客户端 - 服务器程序,我遇到尝试连接到服务器不同的路由器上时,一个奇怪的例外:奇怪的C#SocketException
“连接尝试失败,因为连接的方没有正确后响应一段时间,或建立的连接失败,因为连接的主机未能响应。“
客户端可以在本地网络中完美地连接到服务器,但它在Internet上时不起作用。
我端口转发端口1250(我使用的一个),并使用SimplePortForwarding(http://www.simpleportforwarding.com/)我验证该端口是开放的和工作。
我根据我对这个教程的实现: http://www.developerfusion.com/article/3918/socket-programming-in-c-part-1/
任何想法有什么不好? 谢谢!
这里是服务器侦听方法:
public void startListening(int port)
{
lock(_locker)
{
_listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// Bind socket to local endpoint, and listen for incoming connections
IPEndPoint ipEndpoint = new IPEndPoint(IPAddress.Any, port);
_listeningSocket.Bind(ipEndpoint);
_listeningSocket.Listen(10);
waitForNewClient();
// successfully started listening
_isListening = true;
} catch (SocketException e)
{
// failed for some strange reason
_isListening = false;
}
}
}
这里是客户端连接代码:
public String connect(String ipAddress, int port)
{
lock(_locker)
{
if (!_connecting)
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(ipAddress), port);
try
{
_socket.Connect(endpoint);
_connected = true;
waitForData();
_eventManager.queueEvent(new PlayerJoinedEvent(PlayerJoinedEvent.PLAYER_JOINED, name));
} catch (SocketException e)
{
// Exception is thrown HERE
return e.Message;
}
}
}
return "";
}
仅供参考,您的怪异的例外就是俗称的连接超时。 – 2011-03-19 03:12:44
对不起,昨天是我第一次做任何套接字编程。 – user434565 2011-03-19 03:14:30
你在连接什么IPAddress?本地LAN的IP地址通常与互联网IP地址不同。如果您对LAN和Internet使用相同的IP地址,则根据您设置的IP地址类型,只有其中一个IP地址可以工作。 – 2011-03-19 08:20:41