【发布时间】:2016-12-27 18:42:32
【问题描述】:
我的朋友运行一个简单的 C# 控制台应用程序,它在端口 8484 上启动一个 TcpListener。它是这样完成的:
public static void Listen()
{
Listener = new TcpListener(IPAddress.Any, 8484);
Listener.Start();
Listener.BeginAcceptSocket(new AsyncCallback(EndAccept), null);
}
public static void EndAccept(IAsyncResult IAR)
{
Console.WriteLine("Connection accepted on Port 8484.");
Socket socket = Listener.EndAcceptSocket(IAR);
Instance = new Client(socket);
Listener.Stop();
Listener = null;
}
我使用以下方式连接到他:
public void Connect()
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
_socket.Connect(IP, Port);
Debug.WriteLine("Connected with server!");
}
catch (Exception ex)
{
Debug.WriteLine(TypeName + " [ERROR] Could not connect to server @ {0}:{1}: {2}", IP, Port, ex.Message);
}
}
但是,由于某种原因 - 他无法接受连接,它说它没有响应。 8484 端口在他的计算机上 100% 开放。
为什么会这样?
【问题讨论】:
-
您的网络上的 8484 端口是否打开?
-
你的朋友在哪里?在互联网 WAN 或 LAN 上?
-
@DiegoCNascimento WAN。是的,端口是开放的。
-
@user2714359 你怎么确定端口是开放的?如果只是因为您的朋友防火墙被禁用或有规则并不意味着。如果它有 NAT,它可以是开放的,但不能从外部访问。此外,一些 ISP 会阻止低端口,即使是 8484 也会被阻止。
-
@DiegoCNascimento 我们在各个站点测试了该端口,并尝试了一个公共聊天程序来使用该端口,它是开放的。
标签: c# sockets tcp tcplistener