【发布时间】:2021-05-25 17:48:11
【问题描述】:
我在 C# 中使用 Unity 运行客户端,仅此而已
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) 将套接字设为非阻塞。
【问题讨论】:
-
什么是IP和PORT?您收到此错误消息的原因有几个。一个常见的原因是如果 IP 地址是环回 127.0.0.1 并且您使用 Send() 方法。为什么您的客户端和服务器在同一台机器上,您必须确保侦听器和发送者不使用相同的 IP。因此,您使用侦听器 IP.Any 和客户端使用机器的 IP 地址。
-
@jdweng ip 为“192.168.1.100”,端口为 7042
-
这是否回答了您的问题:C socket: recv and send all data ? -> 接受的答案状态:
The recv() and send() functions do not guarantee to send/recv all data (see man recv, man send) -
从 cmd.exe 中检查>Netstat -a 并查看端口是否已被使用。侦听器必须在客户端之前启动。如果在同一台机器上,监听器不能使用 IP 192.168.1.100。