我在winsock库中发现了这个功能listen
和recv
的错误(TCP / IP流通信)。
listen函数将套接字置于正在侦听传入连接的状态。
recv函数从连接的套接字或绑定的无连接套接字接收数据。
这是否意味着如果我想从特定套接字接收数据,我应首先使用listen
然后使用recv
?我不确定我是否理解这一点。
答案 0 :(得分:2)
函数listen
和recv
具有完全不同的功能和用途。
listen
功能旨在允许等待一个或多个客户端连接的服务器监听端口是否有人连接。
recv
函数用于已建立的套接字,以接收从该套接字另一端的机器发送的数据。
正如评论中提到的那样,我还要提到connect
。连接是听力的对应物。它与侦听机正在侦听的端口进行通信,并与该机器建立套接字。
BSD套接字和winsock库没有真正说清楚的是,从程序员的角度来看,有两种完全不同的套接字,一个监听套接字和一个已建立的套接字。
服务器首先需要创建一个等待客户端的侦听套接字,此套接字不用于实际发送任何数据,它只是为了帮助创建已建立的数据而存在插座。但是,监听套接字不会成为已建立的套接字,当客户端连接时,监听套接字实际上会为数据传输创建第二个套接字。
已建立的套接字是我们认可并用于大多数事物的类型。它是一个插槽,两端都有机器,监听和发送以执行数据传输。