Асинхронный сокет прослушивателя TCP C# не принимает подключения

#c# #sockets #tcplistener

Вопрос:

Я попытался создать свою первую программу асинхронных сокетов на C#, несмотря на отсутствие ошибок в коде, она не принимает подключения. Я проверил по Телнету. это мой код TCP-сервера: я только что видел несколько примеров в Интернете, но не смог найти свою проблему, я считаю, что в мой код следует добавить что-то еще.

 class Program {  static byte[] Mybuffer = new byte[4096];  static TcpClient tc = new TcpClient();    private static void PrintUsageInfo()  {   }  static void Main(string[] args)  {   TcpListener tl = new TcpListener(IPAddress.Parse("192.168.1.141"), 8008);  tl.Start();  tl.BeginAcceptTcpClient(OnCompleteTCP, tl);    }     static void OnCompleteReadData(IAsyncResult isa)  {  int countreadbytes = 0;      try  {  //TcpClient tc;  tc = (TcpClient)isa.AsyncState;  countreadbytes = tc.GetStream().EndRead(isa);  if (countreadbytes==0)  {  Console.WriteLine("USER Disconnected");  //client disconnect  return;  }    //continue to get data  tc.GetStream().BeginRead(Mybuffer, 0, Mybuffer.Length, OnCompleteReadData, tc);  Console.Write(Encoding.ASCII.GetString(Mybuffer));  }  catch(Exception ex)  {  Console.WriteLine(ex.ToString());  }   }  static void OnCompleteTCP(IAsyncResult isa)  {    TcpListener tcpl = (TcpListener)isa.AsyncState;        tc=tcpl.EndAcceptTcpClient(isa);  tc.GetStream().BeginRead(Mybuffer, 0, Mybuffer.Length, OnCompleteReadData, tc);    } }  

Так в чем же проблема?

Комментарии:

1. Звучит как брандмауэр или привязка адреса; сначала попробуйте использовать IPAddress.Any в качестве первого аргумента. Если это сработает, отлично. Если это не так, временно отключите брандмауэр. Если это работает, создайте правило брандмауэра для порта 8008

2. TNX. отключение брандмауэра было первой мерой, которую я предпринял для решения этой проблемы, но она не работает даже с IP-адресом. Любой! Я думаю, что это должно быть что-то очень простое, чего я не смог найти

3. Можете ли вы подключиться по телетайпу к любой другой службе на целевой машине? netstat -a отобразит список портов прослушивания

Ответ №1:

Благодаря Каюсу Ярду я проверил netstat-a, чтобы увидеть все прослушивающие порты, но моего порта там не было. Итак, я выяснил, что это может быть проблемой при запуске процесса. Я поместил beginacceptcpclient в цикл while(true), и теперь он работает хорошо!

 static void Main(string[] args)  {   TcpListener tl = new TcpListener(IPAddress.Any, 8008);  tl.Start();  while (true) { tl.BeginAcceptTcpClient(OnCompleteTCP, tl); }    }