[英]Socket.getOutputStream() blocking when wireless connection disabled
[英]What happens when data is written to socket.getOutputStream on server side?
我对 ServerSocket Client 有疑问:android Server: my pc with static IP 我在客户端使用套接字连接到服务器,服务器接受套接字并获取它的输入和输出流。 问题是当服务器将数据写入该输出流时,我无法理解客户端如何接收消息(我知道如何)。 如果是服务器向客户端发送数据的情况,考虑到客户端(android)没有可以通过互联网访问的 IP,怎么可能呢? 我知道长轮询,这里也使用了这种方法吗?
让我试着回答一个问题,当客户端没有公共互联网地址时,服务器如何向客户端发送任何数据。
执行此操作的技术称为网络地址转换 (NAT) 。
客户端创建一个套接字并使用该套接字向服务器发送请求。 此请求首先发送到客户端的 Internet 网关并寻址到服务器。
Internet 网关通常是具有公共 IP 地址的路由器。 这个路由器会记住客户端已经向服务器发送了数据,并将数据中from
字段中的 IP 和端口替换为路由器的 IP。
现在数据包到达服务器,当服务器决定发送一个答案时,它将把它寻址到路由器的 IP 和端口。
当数据包到达路由器时,它会查找与该端口关联的本地客户端,然后重写数据包中的端口和 IP 以匹配本地客户端。
然后它将数据包发送到客户端。
任何连接到互联网的设备都有一个IP 地址,因此您认为客户端(android)没有 IP 地址的假设是错误的。 此外,套接字连接将持续存在,直到您明确关闭它或由于网络故障,因此一旦建立连接,服务器也可以写入输出流,客户端可以读取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.