【发布时间】:2016-02-22 15:59:12
【问题描述】:
当我们将read()函数与文件描述符(不是套接字)一起使用时,它具有像这样的字节偏移量。
read(file descriptor, message1, 20);read(file descriptor, message2, 40);
在 number1 命令之后,文件描述符的字节偏移量是 20,正如它所说。 然后,第 2 条命令在字节偏移 20 处读取文件,文件描述符的最终偏移量现在是 60。
所以,现在我的问题是关于套接字的。让我解释一下你的情况。
在服务器-客户端模型上,客户端向服务器发送 100 个字节(假设它是字符串数据)。但是,不幸的是,服务器按顺序接收数据 10、20、70(不是一次 100 个字节。)
所以,由于这种情况,服务器源代码是这样的。
51 while(recv_len<100)
52 {
53 recv_count=read(cli_sock, message[recv_len], 1024);
54
55 if(recv_count==-1)
56 error_handling("read() error");
57
58 recv_len+=recv_count;
59 }
所以客户端首先将 100 字节字符串中的 10 字节数据写入服务器。
不管怎样,服务器执行read()函数,读取1024字节。因此,服务器占用 10 个字节。但是,它的字节偏移量现在是 1024。
那么,在客户端的第二个数据(20字节数据)之后,服务器必须在字节偏移1024处读取。那么,服务器如何读取客户端发送的20字节?我的意思是,服务器必须在字节偏移 10(而不是 1024)处读取 20 个字节,因为在 20 个字节之前发送了 10 个字节的数据。但是,服务器的字节偏移量为 1024。这怎么可能?
【问题讨论】:
-
为什么你认为这是一个偏移量?它是您要读取的字节数。
标签: c linux sockets networking