WinError: 10054 (0x2746) 远程主机强行关闭了现有连接 TCP服务器

问题描述

我有从 Unity 运行的 C# 客户端,仅此而已

byte[] buffer = { 1 };
Socket s = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
s.Connect(IP,PORT);
system.int32 Result = s.Send(buffer);
Debug.Log(Result);

服务器端是用C写的,真的很长所以这里是我出错的地方

for(char i = 0; i < MAX_PLAYERS; ++i)
{
            if(ClientSockets[i] == INVALID_SOCKET) break;
            

            Result = recv(ClientSockets[i],Message,sizeof(Message),0);
            
            if (Result == SOCKET_ERROR)
            {
                unsigned long LastError = GetLastError();
                if (LastError != 10035)
                {
                    Error("recv Failed.\n");
                }
            }

在将套接字放入 ClientSockets 数组之前,我已使用 ioctlsocket(ClientSocket,FIONBIO,&iMode) 使套接字非阻塞。

解决方法

修复了它。我的问题是客户端的套接字是在函数内部创建的,因此在函数执行完毕后它就消失了。