Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Tcp服务器未接收数据包_C#_Windows_Sockets_Tcp_Network Programming - Fatal编程技术网

C#Tcp服务器未接收数据包

C#Tcp服务器未接收数据包,c#,windows,sockets,tcp,network-programming,C#,Windows,Sockets,Tcp,Network Programming,好吧,这个问题真的很难解释,但我会尽力的。我基本上是在制作一个基于tcp的消息传递程序,它使用一个服务器和多个客户端。发生的事情是,我正在从客户端向服务器发送tcp数据包,它们正在到达服务器计算机,但不是实际的服务器程序。服务器运行在Windows 7 Pro台式机上,客户端运行在Windows 8 Home Prem HP笔记本电脑上。它甚至从未看到客户端连接。奇怪的是,当我在笔记本电脑上运行服务器,在台式机上运行客户端时,它可以完美地工作。它还可以与2台Windows 8平板电脑完美配合使用

好吧,这个问题真的很难解释,但我会尽力的。我基本上是在制作一个基于tcp的消息传递程序,它使用一个服务器和多个客户端。发生的事情是,我正在从客户端向服务器发送tcp数据包,它们正在到达服务器计算机,但不是实际的服务器程序。服务器运行在Windows 7 Pro台式机上,客户端运行在Windows 8 Home Prem HP笔记本电脑上。它甚至从未看到客户端连接。奇怪的是,当我在笔记本电脑上运行服务器,在台式机上运行客户端时,它可以完美地工作。它还可以与2台Windows 8平板电脑完美配合使用。它不能使用Windows 10 HP多功能一体机作为服务器,Windows 7桌面作为客户端。当我尝试从桌面连接时,Windows 10多功能一体机在Kernel-Base.dll的事件查看器中出现错误,但在Windows 7桌面作为服务器,笔记本作为客户端的情况下,它不会在桌面或笔记本上显示错误。当服务器和客户端在同一台计算机上使用localhost时,它也可以工作,任何计算机都可以。我还检查了所有计算机的防火墙,它们的所有端口都是允许的并且正常工作。问题不在于两者之间的连接,而是windows没有将数据包转发到服务器程序的原因

服务器数据包处理代码:

private void ListenForClients()
    {
      listener.Start();
      console.AppendText("Listening for clients.\n");
      console.AppendText("[SERVER STARTED SUCCESSFULLY]\n");
      serverInfoText.Text = "Server IP: " + getLocalIP();
      while (true)
      {
        TcpClient client = listener.AcceptTcpClient();

        Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
        clientThread.Start(client);
        Thread.Sleep(10);
      }
    }

private void HandleClientComm(object client)
    {
        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();
        string sentMessage;

        byte[] message = new byte[4096];
        int bytesRead;

        while (true) {
        bytesRead = 0;

        try
        {
          bytesRead = clientStream.Read(message, 0, 4096);
        }
        catch
        {
          break;
        }

        if (bytesRead == 0)
        {
          break;
        }
        clientStream.Write(message, 0, message.Length);
        ASCIIEncoding encoder = new ASCIIEncoding();
        sentMessage = encoder.GetString(message, 0, bytesRead);
该代码的其余部分是解析消息和其他内容。是的,我说这很难解释,但我非常困惑,为什么它会这样做。感谢您的帮助,我已经花了4天的时间试图解决这个问题。我还有一个包没有收到(粘贴在这里:):


防火墙规则?确保通过TCP在该端口的防火墙上有一个漏洞;您甚至可以暂时禁用防火墙,看看它是否可以工作,假设服务器是相对隔离的DBTW:每个客户端线程通常不是一个好主意;它只适用于少数客户机,尽管这个问题重复了现有的100个问题,比如“我的服务器不接收连接”。证明你检查了所有常见的原因。然后,发布复制问题的最小代码。由于没有传入连接,因此不需要查看函数HandleClientComm。但我们必须知道如何启动服务器。解决所有这些问题,然后报告。暂时关闭。我猜您知道数据包是使用wireshark或类似工具到达服务器的吧?请注意,wireshark可以在数据包撞上windows防火墙之前获取数据包。注释1:好的,我在2分钟前检查了防火墙,所有规则都允许程序通过。评论2:如果我遇到问题,我可能会考虑稍后修复。这适用于最大用户数为20-50的LAN网络。评论3:我已经检查过了,但是没有一个有相同的问题。如果有一样的,如果你寄给我,我很乐意看一看。评论4:我实际上使用的是Wireshark,所以我将进一步研究防火墙。
0000   e0 3f 49 a6 6c 06 00 1e 33 ba bf 97 08 00 45 00
0010   00 34 50 74 40 00 80 06 28 f4 c0 a8 00 08 c0 a8
0020   00 03 c0 15 19 d0 f8 9b aa e0 00 00 00 00 80 02
0030   20 00 50 52 00 00 02 04 05 b4 01 03 03 08 01 01
0040   04 020 02 04 05 b4 01 03 03 08 01 01 04 02