gpt4 book ai didi

客户端消息未通过 tcp Winsock 到达服务器

转载 作者:行者123 更新时间:2023-11-30 15:30:40 25 4
gpt4 key购买 nike

我有服务器客户端应用程序。当我连续发送消息时(下面的代码中没有 scanf),服务器似乎没有收到它们(不打印)。如果我稍等一下(使用下面代码中的 scanf),然后发送下一条消息,服务器工作正常并打印所有消息。

有什么问题吗?我该如何修复它,因为我想对到达服务器的消息执行更多操作(而不仅仅是打印它)。

在我的客户端代码中(服务器不打印任何内容)

char message[(100)] = {0};
int x = rand();
while(i < 3)
{
printf(" I send %d\n", x);fflush(NULL);
sprintf(message, "%d",x);
if( send(mainSockfd, message,strlen(message),0) == -1)
{
printf("ERRRRRORRRR\n");fflush(NULL);
}
i++;
x = rand() % 100;
}

在我的客户端代码中(当服务器打印消息时)

char message[(100)] = {0};
int x = rand();
while(i < 3)
{
printf(" I send %d\n", x);fflush(NULL);
sprintf(message, "%d",x);
if( send(mainSockfd, message,strlen(message),0) == -1)
{
printf("ERRRRRORRRR\n");fflush(NULL);
}
i++;
x = rand() % 100;
scanf("%d",&x); // this is the only change
}

在我的服务器代码中

char command[(100+1)] = {0};
while(1)
{
readLength = recv(sockfd, command, 100+1,0);
if(readLength > 0)
{
printf("arrived = %s,\n",command);fflush(NULL);
ZeroMemory(command, sizeof(command));
}
else if( readLength == 0)
{
break;
}
else if ( readLength < 0 ){
if(GetLastError() == 10035)
{
continue;
}
if(GetLastError() == 10057 || GetLastError() == 10054)
{
break;
}
continue;
}
}

最佳答案

由于您似乎正在传输以 0 结尾的“字符串”,而没有 0 终止,因此您应该读取比读取少一个 char buffer 提供的读取缓冲区始终以 0 结尾,就像您尝试 printf 一个您引发的非 0 结尾的“字符串”一样未定义的行为。

所以改变这个

readLength = recv(sockfd, command, 100+1,0);

变成这样

readLength = recv(sockfd, command, 100,0);

关于客户端消息未通过 tcp Winsock 到达服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25487081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com