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