我正在尝试读取文件并通过网络发送它: 下面是我在服务器端读取和发送文件的代码,
while((sent = read(fp, send_buf, BUFSIZE)) > 0)
{
write(cssock, send_buf, strlen(send_buf));
memset(send_buf, 0, BUFSIZE);
}
我在客户那里读的是:
while(readBytes = read(sock, file_data, BUFSIZE) > 0)
{
write(fp, file_data, strlen(file_data));
}
文件传输正常,但我在缓冲区末尾多了一个字符,我的文件写成:
hello my name is abcd garbage-char
garbage-char 是一些任意字符。知道为什么我会获得如此额外的角色吗?
注意:我仔细检查了我的文件,它除了字符串“my name is abcd”之外什么都没有。没有空格,没有新行。感谢您的帮助。
最佳答案
这里的解决方案很简单。使用您收到的数据的长度,而不是字符串的长度。您没有收到“字符串”。您收到了一个任意字节 block ,它可以是 0 到 255 之间的任何值。因此 strlen
可能会返回无用的结果。但是读取的字节数总是准确的。
关于C读取调用缓冲额外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20014339/