Я делаю многопользовательскую игру в XNA 4.0 с использованием классов сокетов .NET.
Поскольку я никогда раньше не программировал сокеты, я написал небольшую программу клиент-сервер и протестировал ее локально (клиенти сервер на двух разных компьютерах) и они работали просто отлично.
Однако, когда я попытался соединиться между двумя разными сетями (сервер был у меня дома, а клиент работал в доме моего друга, который живет 5 минутпрочь) клиент не может подключиться.
Я использовал метод Socket.BeginConnect (), и .NET не выдавал никаких исключений (если целевой компьютер отклонил соединение, то .NET выкинул быSocketException) На обоих компьютерах не было брандмауэров.
Есть идеи, почему это произошло?
Вот фрагмент моего кода:
public void 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.BeginConnect(endpoint, doConnect, null);
_connecting = true;
} catch (SocketException e)
{
// what happen? SOMEONE SET US UP THE BOMB!
}
}
}
}