我正在用C编写一个服务器程序,它将从客户端读取命令。命令是以5字节数据包的形式出现的,客户端将连续发送一组命令。我必须阅读每个命令的代码是:
while(1)
{
char buffer[1024];
int alreadyread = 0;
int socket = dequeue();
while(alreadyread != 5)
{
do
{
nowread = read(socket,buffer+alreadyread,5-alreadyread);
alreadyread += nowread;
}
while((nowread > 0) && (5-alreadyread > 0));
if(nowread == -1 || nowread == 0)
{
printf("Error reading from client socket\n");
exit(1);
}
//DO COMMAND
但这似乎不起作用:如果客户端发送10个数据包,我读取1或2,然后得到一个segfault。有人知道为什么吗?
最佳答案
while (alreadyread != 5)
似乎无关,因为alreadyread
将是5或nowread
在do do之后将小于0,如果nowread
小于0,则退出。
你对命令的定义很差,我想我们需要更多的信息。
似乎每次命令后都会得到一个新的套接字。如果只是一个客户机发送命令,则应保留套接字,直到获得所需的所有命令。完成后还应该close
套接字,这样就不会耗尽文件描述符。
segfault可能是由程序的另一个尚未显示的区域引起的。
关于c - 接收到1或2后停止从客户端读取数据包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30827912/