)
我正在创建一个简单的服务器应用程序,以便向在特定时间连接的所有客户端发送消息。基本上,我启动一个服务器,它抓住它的内部IP和端口并监听。然后在客户端上,他们连接到我的路由器外部IP和端口,并发送一个TCP包。问题是这样,我的客户端应用程序永远无法成功发送数据包。它超时了。
以下是服务器的代码:
...
try
{
server_listener = new TcpListener(IPAddress.Parse(192.168.0.xxx), 5000);
server_listener.Start();
isRunning = true;
Console.WriteLine("[{0}] The server is now listening for all clients!", DateTime.Now);
Listen();
}
...
void Listen() // Listen to incoming connections.
{
while (isRunning)
{
TcpClient tcpClient = server_listener.AcceptTcpClient(); // Accept incoming connection.
(new Thread(() => SetupAndListen(tcpClient))).Start(); //handle in a new thread
}
}
和客户:
//attempt to connect once...
string textToSend = "CA";
try
{
//---create a TCPClient object at the IP and port no.---
TcpClient client = new TcpClient(EXTERNAL_SERVER_IP, 5000);
NetworkStream nwStream = client.GetStream();
byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend);
//---and see if connected---
nwStream.Write(bytesToSend, 0, bytesToSend.Length);
//---read back the text---
byte[] bytesToRead = new byte[client.ReceiveBufferSize];
int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
Debug.Log("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
client.Close();
}
catch { }
服务器运行正常,没有错误,并且看起来正在我从调试器中看到的内容中正常收听,但我的客户端都没有工作。此外,如果EXTERNAL_SERVER_IP
更改为localhost
,或192.168.0.xxx
,则确实有效。有什么想法发生了什么?
请注意,端口5000确实已被转发。
答案 0 :(得分:1)
您是否尝试使用外部IP从网络内部向服务器发送数据包?这不适用于许多SoHo路由器。您要求的路由器功能称为NAT Loopback。