2017-02-12 34 views
4

我在C客户端和服务器之间实现了一个简单的连接。 在客户端,我在一个循环中读取文件;每次BUFFER_SIZE个字节并将其发送到服务器端(没有上传错误处理)。是否从套接字读取等待或获取EOF?

//client side 
bytesNumInput = read(inputFileFD,bufInput,BUFFER_SIZE) 
bytesSend = write(sockfd,bufInput,bytesNumInput) 

当然,服务器也处于循环状态。

//server side 
bytesRecv = read(sockfd,bufOutput,bytesNumInput) 

现在,我的问题是:

  1. 我能EOF在连接的中间,如果服务器读取比客户端快?
  2. 阅读函数是否等待获取所有数据或与从文件读取相同?
  3. 是否有可能服务器将在1次迭代中处理2次读取迭代?
+3

[文档在这里。](http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html)它都在那里。 – alk

+0

“我可以在中间获得EOF ......”,通过“EOF”,你问“文件结束可能发生在中间......”**或**“”可以'read() '返回EOF'在中间......“? – chux

+0

@chux这个问题的两种形式都没有意义,'EOF在中间'已经是一个矛盾的问题,你的评论是没有意义的 – EJP

回答

2
  1. 不,服务器会等待传入的数据。套接字提供控制流。
  2. 问题我不清楚,阅读总是试图获取所有请求的数据,但如果没有那么多,那么它将得到可用的数据
  3. 是的,套接字没有消息的语义,只是一个字节流。
+0

(2)是自相矛盾的。 – EJP

1

我能EOF在连接的中间,如果服务器读取比客户端快?

编号EOF表示对等体已断开连接。如果连接仍然存在,read()将阻塞,直到(a)至少传输一个字节,(b)发生EOF,或(c)发生错误。

读取函数是否等待获取所有数据或者是否与从文件中读取数据相同?

参见上面的(a)。

是否有可能服务器将处理2读入1写入迭代?

是的。 TCP是一种字节流协议,而不是消息传递协议。