WebSocket serverSocket.Accept() 不触发
WebSocket serverSocket.Accept() doesn't trigger
我正在尝试在 C# 控制台应用程序中使用同步 WebSocket 将 strings
发送到服务器。以下代码在 127.0.0.1
上完美运行,但在我尝试过的任何真实服务器上都不起作用。我得到的结果是客户端连接到 IP/Port 并发送 strings
没有错误,但是当 _clientSocket.Connect(_IP, _PORT);
被调用时 _serverSocket.Accept();
永远不会触发。
此外,如果未调用 serverSocket.Bind(new IPEndPoint(IPAddress.Any, _PORT));
,则发送方在尝试连接时会收到错误消息(如预期)。所以看起来它应该可以工作并且端口也可以工作。
我试过使用各种服务器。下面示例代码中的那个取自 https://server.pro/
所以,问题是,为什么 _serverSocket.Accept();
没有触发,因为发件人可以连接并发送 strings
而没有错误?
private static Socket _serverSocket, _clientSocket;
private const int _PORT = 40288;
//this IP doesn't work, but 127.0.0.1 works flawlessly
private static IPAddress _IP = IPAddress.Parse("37.187.143.226");
//---------sender (client) code---------
_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
//connects, no errors appear
_clientSocket.Connect(IPAddress.Parse(_IP), _PORT);
//sends strings to the server, no errors appear
while (true) {
Console.Write("Enter text to send: ");
string input = Console.ReadLine();
_clientSocket.Send(Encoding.ASCII.GetBytes(input));
Console.WriteLine("Sent!");
}
//-------listener (server) code--------
_serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
_serverSocket.Bind(new IPEndPoint(IPAddress.Any, _PORT));
_serverSocket.Listen(10);
Console.WriteLine("Waiting for a client socket to connect");
_clientSocket = _serverSocket.Accept(); //never triggers
Console.WriteLine("Socket accepted, waiting for data...");
服务器代码必须 运行 在您要连接的机器上。那就是 IP 为 37.187.143.226 的机器。
所以要么 运行 一切都在本地并使用目标 IP "localhost" 要么 运行 另一个盒子上的服务器并使用 37 IP。
另请注意,防火墙和路由器通常必须配置为允许访问。
我正在尝试在 C# 控制台应用程序中使用同步 WebSocket 将 strings
发送到服务器。以下代码在 127.0.0.1
上完美运行,但在我尝试过的任何真实服务器上都不起作用。我得到的结果是客户端连接到 IP/Port 并发送 strings
没有错误,但是当 _clientSocket.Connect(_IP, _PORT);
被调用时 _serverSocket.Accept();
永远不会触发。
此外,如果未调用 serverSocket.Bind(new IPEndPoint(IPAddress.Any, _PORT));
,则发送方在尝试连接时会收到错误消息(如预期)。所以看起来它应该可以工作并且端口也可以工作。
我试过使用各种服务器。下面示例代码中的那个取自 https://server.pro/
所以,问题是,为什么 _serverSocket.Accept();
没有触发,因为发件人可以连接并发送 strings
而没有错误?
private static Socket _serverSocket, _clientSocket;
private const int _PORT = 40288;
//this IP doesn't work, but 127.0.0.1 works flawlessly
private static IPAddress _IP = IPAddress.Parse("37.187.143.226");
//---------sender (client) code---------
_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
//connects, no errors appear
_clientSocket.Connect(IPAddress.Parse(_IP), _PORT);
//sends strings to the server, no errors appear
while (true) {
Console.Write("Enter text to send: ");
string input = Console.ReadLine();
_clientSocket.Send(Encoding.ASCII.GetBytes(input));
Console.WriteLine("Sent!");
}
//-------listener (server) code--------
_serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
_serverSocket.Bind(new IPEndPoint(IPAddress.Any, _PORT));
_serverSocket.Listen(10);
Console.WriteLine("Waiting for a client socket to connect");
_clientSocket = _serverSocket.Accept(); //never triggers
Console.WriteLine("Socket accepted, waiting for data...");
服务器代码必须 运行 在您要连接的机器上。那就是 IP 为 37.187.143.226 的机器。
所以要么 运行 一切都在本地并使用目标 IP "localhost" 要么 运行 另一个盒子上的服务器并使用 37 IP。
另请注意,防火墙和路由器通常必须配置为允许访问。