Во время тестирования моей программы клиент-сервер я столкнулся со странным исключением при попытке подключиться к серверу на другом маршрутизаторе:
"Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, потому что подключенный хост не смог ответить."
Клиент может прекрасно подключаться к серверу в локальной сети, однако он не работает, когда подключен к Интернету.
Я портирую перенаправленный порт 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 "";
}