繁体   English   中英

当数据写入服务器端的 socket.getOutputStream 时会发生什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM