Sockets TCP:是否可以绑定套接字,然后/both/从中连接并从中接受(客户端和服务器规则)?
在任何通用平台(如Windows)中,是否有可能编写一个服务进程来创建套接字,将其绑定到一个本地“地址:端口”(固定),然后:Sockets TCP:是否可以绑定套接字,然后/both/从中连接并从中接受(客户端和服务器规则)?,sockets,tcp,port,connect,listen,Sockets,Tcp,Port,Connect,Listen,在任何通用平台(如Windows)中,是否有可能编写一个服务进程来创建套接字,将其绑定到一个本地“地址:端口”(固定),然后: 使用它侦听传入连接(在指定端口上) 同时 将其用作客户端套接字以连接到其他服务(源端口与它向其他服务公开的端口相同) 也就是说(很抱歉语法滥用): mySocket=socket();mySocket.bind(myaddress,3000); mySocket.connectTo(邻居、任何端口);//并作为端口3000呈现给其他人 mySocket.listen
- 使用它侦听传入连接(在指定端口上) 同时
- 将其用作客户端套接字以连接到其他服务(源端口与它向其他服务公开的端口相同)
非常感谢 否,套接字不能同时用于侦听和连接<如果已调用
listen()
,则code>connect()将返回WSAEINVAL
错误;如果已调用connect()
,则listen()
将返回WSAEISCONN
错误。您需要使用单独的插座。如果可以,会出现各种各样的问题。例如,如果select()返回套接字是可读的,那么您是执行recv()还是执行accept()?您需要两个套接字来扮演这两个角色
一个插座有什么优点?例如,如果您希望在发生有趣的事情(传入连接、传入数据)之前执行阻塞读取,那么还有其他选择。在该示例中,您将使用select()一次阻塞两个套接字。select()的结果告诉您哪个套接字已就绪。它告诉您是要从一个套接字接受()新连接,还是要从另一个套接字接受()新数据