好的问题很难解释,但我会尝试。我基本上是在制作一个使用服务器和多个客户端的基于tcp的消息传递程序。发生的事情是我从客户端向服务器发送tcp数据包,然后他们到达服务器计算机而不是实际的服务器程序。服务器在Windows 7 Pro桌面上运行,客户端在Windows 8 Home Prem HP笔记本电脑上运行。它甚至从未看到客户端连接。奇怪的是,当我在笔记本电脑上运行服务器和桌面上的客户端时,它的工作正常。它也适用于2个Windows 8平板电脑。它不适用于作为服务器的Windows 10 HP All-in-one和作为客户端的Windows 7桌面。当我尝试从桌面连接但Windows 7桌面作为服务器和笔记本电脑作为客户端时,Windows 10多功能一体机在Kernel-Base.dll的事件查看器中出现错误,它不会显示错误台式机或笔记本电脑。当我使用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天时间试图解决这个问题。我也有他们没有收到的数据包(粘贴在这里:http://sadjad.me/phd/):
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