0

我正在linux中开发ac程序。我需要使用客户端服务器编程。我使用了读写,它工作得很好。但是在服务器和客户端都使用了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=read(a,&c,sizeof(int)); printf("选择:%d",c);

在客户端,

scanf("%d",&ch); s=write(sd,&ch,sizeof(int));

两者的大小都是 4。但是,在客户端中,我在打印选择时得到了垃圾值。

4

1 回答 1

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

于 2012-12-03T11:43:46.050 回答