如果客户端监听一个套接字,例如http://socketplaceonnet.com,它怎么知道有新内容?我假设服务器无法直接向客户端发送数据,因为客户端可能位于路由器后面,没有端口转发,因此无法直接连接。客户端可以是更改其 IP 地址的移动电话。我知道客户端要成为监听器,服务器不需要知道客户端的 IP。
谢谢
如果客户端监听一个套接字,例如http://socketplaceonnet.com,它怎么知道有新内容?我假设服务器无法直接向客户端发送数据,因为客户端可能位于路由器后面,没有端口转发,因此无法直接连接。客户端可以是更改其 IP 地址的移动电话。我知道客户端要成为监听器,服务器不需要知道客户端的 IP。
谢谢
客户端套接字不侦听传入连接,它启动到服务器的传出连接。服务器套接字侦听传入连接。
服务器创建一个套接字,将套接字绑定到 IP 地址和端口号(用于 TCP 和 UDP),然后侦听传入连接。当客户端连接到服务器时,会创建一个新套接字用于与客户端通信(仅限 TCP)。轮询机制用于确定是否在任何打开的套接字上发生了任何活动。
客户端创建一个套接字并连接到远程 IP 地址和端口号(用于 TCP 和 UDP)。可以使用轮询机制(select()
、poll()
、epoll()
等)来监视套接字以获取来自服务器的信息,而不会阻塞线程。
在客户端位于提供 NAT(网络地址转换)的路由器后面的情况下,路由器会重写客户端的地址以匹配路由器的公共 IP 地址。当服务器响应时,路由器将其公共 IP 地址更改回客户端的 IP 地址。路由器保留一个它正在转换的活动连接表,以便它可以将服务器的响应映射到正确的客户端。
TCP 迭代服务器接受客户端的连接,然后对其进行处理,完成来自客户端的所有请求,然后断开连接。TCP 迭代服务器一次只能处理一个客户端的请求。只有当客户端的所有请求都满足时,服务器才能继续后续的请求。如果一个客户端占用服务器,其他客户端就无法工作,所以 TCP 服务器很少使用迭代服务器模型。