从套接字读取数据

时间:2010-04-29 19:04:02

标签: c++ networking sockets

我在从套接字读取数据时遇到问题。据说,有一个等待客户端连接的服务器套接字。当我将客户端写入connect()到服务器套接字/端口时,似乎我已连接。但是当我尝试read()服务器应该在套接字上写入的数据时,read()函数会挂起,直到服务器应用程序停止。

如果连接套接字,为什么read()调用会挂起?我相信我并没有真正连接到套接字/端口,但我无法证明它,b / c connect()调用没有返回错误。 read()调用也没有返回错误,它根本就不会返回。

4 个答案:

答案 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)

您的服务器可能没有将数据写入套接字,因此您的阅读器会阻止等待数据显示在套接字上。