路由器后面的 TCPListener(端口转发)对我不起作用
TCPListener behind router(port forwarded) not working for me
如果我将我的电脑直接连接到互联网,一切正常,但是当我的路由器连接时,以下代码会卡在 readline 中:
`
TcpListener webserver = new TcpListener(IPAddress.Any, 1302);
webserver.Start();
Debug.WriteLine("Started");
TcpClient client = webserver.AcceptTcpClient();
Debug.WriteLine("Client accepted");
sr = new StreamReader(client.GetStream());
sw = new StreamWriter(client.GetStream());
try
{
string req = sr.ReadLine();
Debug.WriteLine("Request: " + req);
if (req != null)
{
//HTTP/1.0 200 OK\n
//+read file to tcpstream
}`
我不是在尝试构建网络服务器,我只是在使用 tcp 进行测试。
如果我在网络浏览器或我的 public IP 中使用 http://192.168.1.100:1302/ 而没有路由器,则网页会加载,所以我猜这是 sg 与我的路由器有关,还是我必须执行其他操作?
我看到的是:
readline 被卡住了(如果我刷新页面几次 GET / HTTP/1.1 就会进入低谷)
如果我使用 read() 我会看到负载 -1
我使用了 wireshark,我看到很多灰色的包和很多重传:
wireshark
我首先被卡住了,我想我必须实施 Upnp 或 nat punch through,但由于有些事情正在通过,我认为建立连接不是问题。
为什么会丢包?我应该从哪里开始调试问题?
更新 #1:
客户端(chrome webbrowser)是同一台计算机,但我尝试了外部计算机(有和没有在路由器后面)结果相同。
更新#2:我想我可能知道问题出在哪里,我只是尝试了一个外部网页测试器并且没有问题,到目前为止每个设备都在同一个 ISP 中。我必须尝试使用 vpn 或我的 ISP 网络之外的设备。
我不知道这是否正常,但由于数据包丢失,大多数数据包从未到达我的应用程序。这个问题显然是由我的路由器(可能还有 sg.else)引起的,但我什至尝试用同一 ISP 中的其他设备连接到我的应用程序同样的问题。我通过使用 vpn 以及另一台使用不同 ISP 的计算机确认了这一点。
如果我将我的电脑直接连接到互联网,一切正常,但是当我的路由器连接时,以下代码会卡在 readline 中:
`
TcpListener webserver = new TcpListener(IPAddress.Any, 1302);
webserver.Start();
Debug.WriteLine("Started");
TcpClient client = webserver.AcceptTcpClient();
Debug.WriteLine("Client accepted");
sr = new StreamReader(client.GetStream());
sw = new StreamWriter(client.GetStream());
try
{
string req = sr.ReadLine();
Debug.WriteLine("Request: " + req);
if (req != null)
{
//HTTP/1.0 200 OK\n
//+read file to tcpstream
}`
我不是在尝试构建网络服务器,我只是在使用 tcp 进行测试。 如果我在网络浏览器或我的 public IP 中使用 http://192.168.1.100:1302/ 而没有路由器,则网页会加载,所以我猜这是 sg 与我的路由器有关,还是我必须执行其他操作? 我看到的是:
readline 被卡住了(如果我刷新页面几次 GET / HTTP/1.1 就会进入低谷) 如果我使用 read() 我会看到负载 -1
我使用了 wireshark,我看到很多灰色的包和很多重传: wireshark
我首先被卡住了,我想我必须实施 Upnp 或 nat punch through,但由于有些事情正在通过,我认为建立连接不是问题。
为什么会丢包?我应该从哪里开始调试问题?
更新 #1: 客户端(chrome webbrowser)是同一台计算机,但我尝试了外部计算机(有和没有在路由器后面)结果相同。
更新#2:我想我可能知道问题出在哪里,我只是尝试了一个外部网页测试器并且没有问题,到目前为止每个设备都在同一个 ISP 中。我必须尝试使用 vpn 或我的 ISP 网络之外的设备。
我不知道这是否正常,但由于数据包丢失,大多数数据包从未到达我的应用程序。这个问题显然是由我的路由器(可能还有 sg.else)引起的,但我什至尝试用同一 ISP 中的其他设备连接到我的应用程序同样的问题。我通过使用 vpn 以及另一台使用不同 ISP 的计算机确认了这一点。