#c# #server #tcp
Вопрос:
У меня есть серверное приложение .
Если я запущу его на сервере, приложение просто не будет взаимодействовать с клиентом. Я пытаюсь разрешить все порты, используемые в брандмауэре, а также все приложение, но это не помогло. На локальном хостинге это работает нормально. Рабочая система корректно обновлена Win 10. Сервер-Windows server 2012.
public void Listen(object data)
{
// Establish the local endpoint for the socket.
// The DNS name of the computer
// running the listener is "host.contoso.com".
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
// Create a TCP/IP socket.
Socket listener = new Socket(ipAddress.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local endpoint and listen for incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen(100);
while (true)
{
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
Console.WriteLine("Waiting for a connection...at" localEndPoint.ToString());
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("nPress ENTER to continue...");
Console.Read();
Комментарии:
1. Это адреса IPv6. Вы проверили настройки брандмауэра IPv4 и IPv6? Вы намеревались использовать IPv6? Кроме того, на левой картинке он прослушивает «::1″…
2. Похоже, у сервера нет адреса IPv6… как заставить его использовать IPv4 ?
3. А-а-а, дай-ка я посмотрю это, быстро. Прошла целая вечность с тех пор, как я делал это вручную.
4. IP-адрес IP-адрес = ipHostInfo. Список адресов[0]; В первой позиции находится IPv6-адрес IPAddress IPAddress = ipHostInfo. Список адресов[1]; На второй позиции находится IPv4-адресное серверное связанное разрешение на запись, которое я могу дать вам разрешение 🙂
5. Если вы не пытаетесь привязаться к определенному адресу, вы можете просто использовать
IPAddress.Any
его при создании своей конечной точки.
Ответ №1:
Похоже, вам следует использовать адреса IPv4.
Вы можете использовать свойство IPAdress AdressFamily, чтобы получить действительный IPv4-адрес («Интернет»). Также проверьте isLoopback()
.
Итак, в основном
IPAdress myIp = ipHostInfo
.AddressList
.Where( a => a.AddressFamily == AddressFamily.InterNetwork)
.FirstOrDefault(x => !IPAdress.IsLoopback(x));
должен дать вам хороший, если он существует.
… или, как Damien_The_Unbeliever так сильно напомнил мне в комментарии: просто используйте IPAdress.Any
для прослушивания любой ip-адрес.