gpt4 book ai didi

客户端-服务器程序

转载 作者:行者123 更新时间:2023-11-30 18:14:42 26 4
gpt4 key购买 nike

我们在UNIX环境下制作了简单的client.cserver.c程序。我们使用它来传输一个简单的文本文件,首先打开它,然后读取它并使用 openreadsend 系统调用发送;在客户端,我接收它,并通过在服务器计算机上创建文件来写入它。传输进行得相当顺利,但客户端收到的文件与服务器端不完全相同。在可读字符之间有一些不可读字符。您能告诉我这可能是什么原因吗?虽然文件的大部分内容是相同的,但只有一小部分之间存在差异。

代码可见here .

谢谢!

服务器端循环:

do
{
n=read(t,buf,100);
write(1,buf,strlen(buf));
send(connected, buf,strlen(buf), 0);
} while(n!=0);

在客户端

do
{
bytes_recieved=recv(sock,recv_data,100,0);
count=write(t,recv_data,strlen(recv_data));
} while(bytes_recieved!=0);

最佳答案

在第一种情况下,不要使用strlen()。绝对不能保证文件流中的任何位置都会有 NUL 字节,事实上对于文本文件来说永远不应该有 NUL 字节。

每次循环时,您都应该输出收到的实际字节数,而不是 strlen() 认为缓冲区中可能有多少字节:

do
{
bytes_received = recv(sock, recv_data, 100, 0);
if (bytes_received < 0) {
perror("read");
break;
} else if (bytes_received == 0) {
break;
} else {
count = write(t, recv_data, bytes_received);
// in theory - add error check here too!
}
} while (count > 0);

关于客户端-服务器程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/778544/

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