【发布时间】:2014-10-18 16:08:41
【问题描述】:
我有服务器客户端应用程序。 当我连续发送消息(下面的代码中没有 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;
}
}
【问题讨论】:
-
command是如何声明的?MAX_MSGLEN是什么?同时打印readLength。message是如何声明的? -
我编辑了。当连接关闭时,readLength 为 -1。在没有 scanf 的代码中没有打印任何内容(我也尝试打印 readLength)。
-
"readLength is -1" 以及
GetLastError()得到的错误是什么? -
10054.. 当客户端发送完他的消息并关闭连接时会发生这种情况
-
如果
recv()已返回0,则可以中断循环,因为这意味着另一个关闭了连接。请在此处阅读:msdn.microsoft.com/en-us/library/windows/desktop/…
标签: c windows tcp client-server winsock