C读取调用缓冲额外字符

标签 c sockets file-io

我正在尝试读取文件并通过网络发送它: 下面是我在服务器端读取和发送文件的代码,

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/

相关文章:

c - FTP服务器返回码: How to connect with a host using my own TCP server and Linux built-in client

c++ - 文件描述符和套接字连接

java - 添加从文本文件读取的 double

python - 何时以及为何使用 AF_UNIX,为什么使用同一台机器

python - 读取 Unicode 文件 - Python3.2

python - 在 python txt 文件中打印特定列

c - 除以N的二进制时钟序列算法?

c - 从结构体中的指针获取数组

c - 为什么sin^2(a)+cos^2(a)的整数类型转换返回0而不是1?

c - 简洁地声明和初始化指针(即指向 int 的指针)