【发布时间】:2017-06-30 11:57:41
【问题描述】:
我正在用 C 实现客户端和服务器之间的简单连接。 在客户端,我处于一个循环中,从文件中读取;每次BUFFER_SIZE字节发送到服务器端(没有上传错误处理)。
//client side
bytesNumInput = read(inputFileFD,bufInput,BUFFER_SIZE)
bytesSend = write(sockfd,bufInput,bytesNumInput)
当然服务器也是循环的。
//server side
bytesRecv = read(sockfd,bufOutput,bytesNumInput)
现在,我的问题是:
- 如果服务器读取速度快于客户端,我能否在连接过程中获取 EOF?
- 读取函数是等待获取所有数据还是与从文件中读取相同?
- 服务器是否可以在 1 次写入迭代中处理 2 次读取迭代?
【问题讨论】:
-
Docs are here. 都在里面。
-
“我可以在中间得到 EOF ...”,通过“EOF”,您是在问“文件结尾是否可以发生在中间...” 或 ""
read()可以在中间返回EOF吗..."? -
@chux 这个问题的两种形式都是没有意义的。 “中间的EOF”已经是一个矛盾的术语。你的评论毫无意义。
-
@ejp A
read(inputFileFD,bufInput,BUFFER_SIZE)期待BUFFER_SIZE字节,文件结束条件可能发生在其中。read()可以在部分接收到部分BUFFER_SIZE字节后针对各种条件返回-1。 -
@chux 对于
read()返回的内容,请参阅我的回答。问题是关于套接字,而不是文件,它是关于连接的中间,而不是读取的中间。当read()返回时,-1 不是 EOF。您的问题没有区别。
标签: c sockets server client wait