Я пишу сетевое приложение C # Sockets. Он отлично работал, когда я тестировал, подключившись к серверу на «127.0.0.1» , но когда я пришел к точке, где я решил, что хочу тестировать с других машин, и переключил адрес соединенияк моему фактическому IP-адресу я начал получать
Невозможно установить соединение, так как целевая машина активно отказывала в этом - мой IP-адрес: порт-
исключение.
Я искал решения в других постах, но нашел одно: отключить брандмауэр , но это не решило проблему.
Порты совпадают вклиент и сервер, так что это не проблема.
В другом посте предлагается запустить netstat -anb
и посмотреть, прослушивает ли сервер указанный порт, и, к моему удивлению, приложение даже не показывается средирезультаты.
Вот код для установления соединения:
Метод соединения из моего класса, который имеет дело с соединением на стороне клиента:
public bool Connect()
{
if (!connected)
{
try
{
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(new IPEndPoint(IPAddress.Parse(address), port));
connected = true;
return true;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
connected = false;
return false;
}
}
return false;
}
На стороне сервера. Я использую этот простой приемник:
public class Listener
{
Socket sock;
bool listening = false;
int port;
public delegate void socketAcceptedHandler(Socket s);
public event socketAcceptedHandler socketAccepted;
public Listener(int port)
{
this.port = port;
}
public void start()
{
if (listening)
{
return;
}
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(new IPEndPoint(0, port));
sock.Listen(0);
sock.BeginAccept(callback, null);
listening = true;
}
public void stop()
{
if (!listening)
{
return;
}
if (sock != null)
{
sock.Close();
sock.Dispose();
}
listening = false;
}
public void callback(IAsyncResult result)
{
try
{
Socket s = sock.EndAccept(result);
if (socketAccepted != null)
{
socketAccepted(s);
}
sock.BeginAccept(callback, null);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong:\n{0}", e.Message);
}
}
}
ОБНОВЛЕНИЕ: Я проверил, установлено ли соединение, если я использую свой локальный IP-адрес, так оно и есть.Должно быть, роутер.