C# Unity自定义网络(TCP)中的SocketException错误

C# Unity自定义网络(TCP)中的SocketException错误,c#,unity3d,networking,tcp,tcpclient,C#,Unity3d,Networking,Tcp,Tcpclient,我在尝试使用Unity运行服务器和客户端时遇到一些问题。但我一直在犯这样的错误: “SocketException:主机中的软件中止了已建立的连接。 “ 此错误仅在将Player.cs脚本分配给播放机时发生(因为它正在调用sendmation方法) 然后我断开了与网络的连接,错误指出它来自: ClientTCP.SendData(System.Byte[]数据)(位于Assets/Project/Networking/Scripts/ClientTCP.cs:109) ClientTCP.Sen

我在尝试使用Unity运行服务器和客户端时遇到一些问题。但我一直在犯这样的错误: “SocketException:主机中的软件中止了已建立的连接。 “

此错误仅在将Player.cs脚本分配给播放机时发生(因为它正在调用
sendmation
方法) 然后我断开了与网络的连接,错误指出它来自:

ClientTCP.SendData(System.Byte[]数据)(位于Assets/Project/Networking/Scripts/ClientTCP.cs:109)

ClientTCP.SendMovement(Vector3 pos,四元数rot)(位于Assets/Project/Networking/Scripts/ClientTCP.cs:124)。

所以发送数据显然是有问题的,但我是网络新手,所以我真的不知道我做错了什么:p 我会放一个链接到项目文件,看看是否有人能看到我做错了什么


项目文件:

单击第行,然后按F9,在下一行(第109行)上放置断点。然后检查cmd.exe窗口中的消息:myStream.Write(buffer.ToArray(),0,buffer.ToArray().Length);由于错误,连接从未打开或正在关闭。这如何帮助我修复错误?发生错误是因为连接已关闭,这可能是由于多种原因造成的。我们首先需要知道原因。我所知道的原因是SendMovement方法,一旦它被调用,你就会与服务器断开连接。这就是线索。我怀疑问题在于零数据包长度。TCP具有保持活动的功能,其中数据包以零长度发送。所以你不应该仅仅因为你得到一个零长度的数据包就关闭一个连接。如果发送零长度数据包的服务器代码中存在错误,您也可能会收到零长度消息。通过单步执行代码确认您收到的消息长度为零。不能肯定。您可能希望使用诸如wireshark或fiddler之类的嗅探器来帮助调试代码并确认服务器发送了长度为零的消息。