读取和写入客户端服务器编程时出错

时间:2012-12-03 11:37:35

标签: client-server

我正在使用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.但是,在我打印选择时,在客户端我得到了垃圾值。

1 个答案:

答案 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不保留应用程序消息边界 - 这是应用程序的工作。