gpt4 book ai didi

c - 收到 1 或 2 个后,从客户端读取数据包停止

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:29 24 4
gpt4 key购买 nike

我正在用 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 个,然后出现段错误。有谁知道为什么?

最佳答案

while (alreadyread != 5) 似乎无关紧要,因为 alreadyread 将是 5 或 nowread 将小于 0同时,如果 nowread 小于 0,则退出。

您对命令的定义不当,我认为我们需要更多相关信息。

看起来您在执行每个命令后都会获得一个新的套接字。如果只是一个客户端发送命令,你应该保持套接字直到你得到你想要的所有命令。您还应该在使用完后关闭套接字,以免文件描述符用完。

段错误可能是由您未显示的程序的另一个区域引起的。

关于c - 收到 1 或 2 个后,从客户端读取数据包停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30827912/

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