当前位置: 首页 > 知识库问答 >
问题:

当数据写入套接字时会发生什么。服务器端的getOutputStream?

孟智志
2023-03-14

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

共有2个答案

施琦
2023-03-14

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

令狐宜民
2023-03-14

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

这样做的技术称为网络地址转换(NAT)。

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

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

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

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

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

 类似资料: