我正在使用linux上的c程序。我需要使用客户端服务器编程。我使用读写,它工作正常。但在服务器和客户端使用超过20个读写后,它已停止工作。那是我没有收到任何输出。线。我不明白是什么问题,因为我使用了相同的行。
bzero(&hl,200);
read(a,hl,50*sizeof(char));
printf("%s",hl);
在客户端,
bzero(&hl,200);
strcpy(hl,"hello");
write(a,hl,50*sizeof(char));
printf("%s",hl);
此外,我无法获得返回值并将其打印出来。当我在debian中使用它时,我得到了返回值并且能够打印。现在,我在Ubuntu(在家里)。它现在不打印返回值。没错也!这与操作系统有什么关系吗?
请帮我解决问题。
更新:
在服务器中,
int c: S =读(一个,和C,的sizeof(INT)); printf(“choice:%d”,c);
在客户端,
的scanf( “%d”,&安培; CH); S =写入(SD,&安培; CH,的sizeof(INT));
两者的大小都是4.但是,在我打印选择时,在客户端我得到了垃圾值。
答案 0 :(得分:1)
你丢弃read
的返回值,所以你不知道你读了多少字节。如果它低于50怎么办?
变化:
read(a,hl,50*sizeof(char));
要:
int readBytes = 0;
do
{
int r = read(a, hl + readBytes, 50 - readBytes);
if (r <= 0)
return; // or however you want to handle an error
readBytes += r;
} while (readBytes < 50);
这将确保您实际读取50个字节。
你在想象TCP以某种方式将这50个字节粘在一起。但是系统不知道这50个字节是一条消息 - 只有你的代码才有。因此,将它们粘合在一起是你的代码的工作。 TCP不保留应用程序消息边界 - 这是应用程序的工作。