我有服务器客户端应用程序。 当我连续发送邮件时(在下面的代码中没有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 :(得分:1)
当你似乎在没有0
终止的情况下转移0
- 已终止的“字符串”时,你应该读取一个char
少于读取缓冲区提供的值,以便始终具有读取缓冲区0
- 已终止,就像您尝试printf
非0
- 已终止的“字符串”一样,您会引发未定义的行为。
所以改变这个
readLength = recv(sockfd, command, 100+1,0);
成为这个
readLength = recv(sockfd, command, 100,0);