WebSocket serverSocket.Accept()不会触发

时间:2015-05-14 03:16:57

标签: c# websocket network-programming

我正在尝试使用C#控制台应用程序中的同步WebSockets将strings发送到服务器。以下代码在127.0.0.1上完美运行,但在我尝试过的任何真实服务器上都无法正常工作。我得到的结果是客户端连接到IP /端口并发送strings没有错误,但_serverSocket.Accept();在调用_clientSocket.Connect(_IP, _PORT);时永远不会触发。

此外,如果未调用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...");

1 个答案:

答案 0 :(得分:1)

服务器代码必须在要连接的计算机上运行。那将是具有IP 37.187.143.226的机器。

因此要么在本地运行所有内容并使用目标IP“localhost”,要么在另一个框上运行服务器并使用37 IP。

另请注意,通常必须配置防火墙和路由器以允许访问。