路由器(端口转发)后面的TCPListener对我不起作用

时间:2018-12-14 23:29:46

标签: c# networking network-programming router tcplistener

如果我将我的电脑直接连接到互联网,一切正常,但是连接路由器后,以下代码将卡在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
      }`

我不是要构建Web服务器,我只是在用tcp进行测试。 如果我在没有浏览器的网络浏览器或公共IP中使用http://192.168.1.100:1302/,则该网页会加载,因此我猜测这与我的路由器有关,还是我必须实现其他功能? 我看到的是:

  1. 读取行卡住了(如果我刷新页面几次,则GET / HTTP / 1.1陷入低谷) 如果使用read(),我会看到-1

  2. 我使用了Wirehark,并且看到很多灰色的包和很多重传: wireshark

我首先陷入困境,我以为必须实施Upnp或nat through,但是由于某些事情通过了,所以我认为建立连接不是问题。

为什么会有数据包丢失?我什至应该从哪里开始调试问题?

更新#1: 客户端(chrome webbrowser)是同一台计算机,但是我尝试在外部计算机(有和没有路由器的后面)上也得到了相同的结果。

更新#2:我想我可能知道问题是什么,我只是尝试了一个外部网页测试器,没有问题,到目前为止,每个设备都在同一ISP中。我必须使用vpn或ISP网络之外的设备进行尝试。

1 个答案:

答案 0 :(得分:0)

我不知道这是否正常,但是由于数据包丢失,大多数数据包从未到达我的应用程序。这个问题肯定是由我的路由器(也许还有其他)引起的,但是我什至尝试使用同一ISP中的其他设备连接到我的应用程序,但仍存在相同的问题。我通过使用vpn以及另一台使用不同ISP的计算机来确认这一点。