【问题标题】:What happens when data is written to socket.getOutputStream on server side?当数据写入服务器端的 socket.getOutputStream 时会发生什么?
【发布时间】:2020-04-16 17:43:42
【问题描述】:

我对 ServerSocket 有疑问 客户端:安卓 服务器:我的电脑有静态IP 我在客户端使用套接字连接到服务器,服务器接受套接字并获取它的输入和输出流。 问题是当服务器将数据写入该输出流时,我无法理解客户端如何接收消息(我知道如何)。 如果是服务器向客户端发送数据的情况,考虑到客户端(android)没有可以通过互联网访问的IP,怎么可能呢? 我知道长轮询,这也是这里使用的方法吗?

【问题讨论】:

  • 为什么你认为你的客户端没有IP?只要客户端能够连接服务器,它就绑定到某个网络(可能是本地)
  • 我并不是说我的客户没有 ip,但是使用该 ip 我无法通过互联网向他发送消息,而不是本地消息。
  • 但是你可以。你是。这就是连接的含义。

标签: java sockets networking serversocket


【解决方案1】:

让我试着回答这个问题,当客户端没有公共互联网地址时,服务器如何向客户端发送任何数据。

执行此操作的技术称为Network address translation (NAT)

客户端创建一个套接字并使用该套接字向服务器发送请求。该请求首先发送到客户端的 Internet 网关,然后发送到服务器。

Internet 网关通常是具有公共 IP 地址的路由器。该路由器会记住客户端已经向服务器发送了数据,并将数据中from字段中的IP和端口替换为路由器的IP。

现在数据包到达服务器,当服务器决定发送应答时,它会将其寻址到路由器 IP 和端口。

当数据包到达路由器时,它会查找与该端口关联的本地客户端,然后重写数据包中的端口和 IP 以匹配本地客户端。

然后它将数据包发送给客户端。

【讨论】:

    【解决方案2】:

    任何连接到互联网的设备都有一个IP地址,所以你假设客户端(android)没有IP地址是错误。此外,套接字连接将持续,直到您明确关闭它或由于网络故障,因此一旦建立连接,服务器也可以写入输出流并且客户端可以读取数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      相关资源
      最近更新 更多