我在从套接字读取数据时遇到问题。据说,有一个等待客户端连接的服务器套接字。当我将客户端写入connect()
到服务器套接字/端口时,似乎我已连接。但是当我尝试read()
服务器应该在套接字上写入的数据时,read()
函数会挂起,直到服务器应用程序停止。
如果连接套接字,为什么read()调用会挂起?我相信我并没有真正连接到套接字/端口,但我无法证明它,b / c connect()调用没有返回错误。 read()调用也没有返回错误,它根本就不会返回。
答案 0 :(得分:3)
读取阻塞,直到收到一些I / O(或错误)。
答案 1 :(得分:2)
约翰&提到旋转,问题几乎可以肯定,服务器没有发送任何数据给您的read()
电话返回。当您开始使用网络编程时,另一个容易忽略的事情是,在服务器的write()
调用中传输的数据并不总是与客户端的read()
调用对称。如果服务器可能write("hello world")
,您的read()
可以轻松返回"hello world"
,"hello wo"
,"hel"
,甚至仅"h"
答案 2 :(得分:1)
除非您明确地将读者的套接字更改为非阻塞模式,否则在有数据可用之前,对read的调用将完全按照您的说法执行:它将永远阻塞,直到实际读取某些数据为止。
您还可以使用netstat
(我将其与-f inet
一起使用)来确定已建立的连接并查看套接字连接的状态。
答案 3 :(得分:0)
您的服务器可能没有将数据写入套接字,因此您的阅读器会阻止等待数据显示在套接字上。