我正在尝试使用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...");
答案 0 :(得分:1)
服务器代码必须在要连接的计算机上运行。那将是具有IP 37.187.143.226的机器。
因此要么在本地运行所有内容并使用目标IP“localhost”,要么在另一个框上运行服务器并使用37 IP。
另请注意,通常必须配置防火墙和路由器以允许访问。