java - 将数据写入服务器端的 socket.getOutputStream 会发生什么?
问题描述
我对 ServerSocket 客户端有疑问:android 服务器:我的 pc 具有静态 IP 我在客户端使用套接字连接到服务器,服务器接受套接字并获取它的输入和输出流。问题是当服务器将数据写入该输出流时,我无法理解客户端如何接收消息(我知道如何)。如果是服务器向客户端发送数据的情况,考虑到客户端(android)没有可以通过互联网访问的IP,怎么可能呢?我知道长轮询,这也是这里使用的方法吗?
解决方案
让我尝试回答当客户端没有公共互联网地址时,服务器如何向客户端发送任何数据的问题。
执行此操作的技术称为网络地址转换 (NAT)。
客户端创建一个套接字并使用该套接字向服务器发送请求。该请求首先发送到客户端的 Internet 网关,然后发送到服务器。
Internet 网关通常是具有公共 IP 地址的路由器。该路由器会记住客户端已经向服务器发送了数据,并将数据中from
字段中的IP和端口替换为路由器的IP。
现在数据包到达服务器,当服务器决定发送答案时,它会将其寻址到路由器 IP 和端口。
当数据包到达路由器时,它会查找与该端口关联的本地客户端,然后重写数据包中的端口和 IP 以匹配本地客户端。
然后它将数据包发送给客户端。
推荐阅读
- node.js - 如何检索 SharePoint 网页代码(html)或抓取共享点网页?
- php - 嘲笑php测试中的碳对象
- ecmascript-6 - 为什么 !在graphql中的字符串之后?
- reactjs - React redux 正确状态更新
- parallel-processing - 如何在 Julia 中同时写入数组的多个索引?
- for-loop - Makefile 从 for 循环更新全局变量
- reactjs - Snowpack & React:热重装/刷新不起作用
- c# - 与解决方案文件夹结构VS2019相同的文件夹结构
- ruby-on-rails - Gem 是否应该假设加载了其他 gem?
- ios - Xcode 不上传构建