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

为什么android上的套接字服务器总是监听IPv6?

微生嘉
2023-03-14

我启动一个服务器套接字,希望它监听环回地址(127.0.0.1)。代码如下:......

Inet4Address address = (Inet4Address) Inet4Address.getByName("localhost");
TServerSocket server = new TServerSocket(new InetSocketAddress(address ,1234));
.........

public class TServerSocket{
......
  public TServerSocket(InetSocketAddress bindAddr, int clientTimeout) throws                TTransportException {
clientTimeout_ = clientTimeout;
try {
  serverSocket_ = new ServerSocket();
  serverSocket_.setReuseAddress(true);
  serverSocket_.bind(bindAddr);
} catch (IOException ioe) {
   serverSocket_ = null;
  throw new TTransportException("Could not create ServerSocket on address " +        bindAddr.toString() + ".");
 }
  }
   ......
}

但是我发现这个套接字用“netstat”命令开始监听IPv6地址“:ffff:127.0.0.1”,这导致运行在另一个进程(在Python中)中的客户端无法通过“127.0.0.1”连接到这个服务器。

为什么android会自动将IPV4地址映射到IPv6地址?

共有1个答案

弘靖琪
2023-03-14

它没有将IPv4地址映射到IPv6。inet4addressinet6address没有实现getByName()方法,因此您实际上使用了从inetaddress继承的方法。如果主机可以同时通过IPv4和IPv6访问,大多数操作系统将首选IPv6而不是IPv4(您也应该这样做:))。您可以尝试通过inetAddress.getAllByName(“localhost”)获取地址数组,然后检查address是否是inet4Address的实例(或在其他情况下inet6Address),但对于本例,最简单的解决方案是硬编码环回地址(127.0.0.1),因为它几乎不可能更改。

 类似资料:
  • 问题内容: 我在uwsgi上运行flask应用程序。我使用主管来管理uwsgi进程。我发现日志说 您的服务器套接字监听积压限制为100个连接。 如何克服100个连接限制?我正在运行的脚本如下: 问题答案: 请注意,“监听积压”的100个连接并不意味着您的服务器只能处理100个同时(或总数)连接- 而是取决于配置的进程或线程的数量。侦听积压是一个套接字设置,它告诉内核如何限制侦听套接字的侦听队列中未

  • 问题内容: 对于linux c编程原始套接字,这是一个快速的问题。如果我只想使用原始套接字来监听任何接口,我是否真的必须绑定到ip地址或接口来监听流量?据我了解,我觉得我应该能够只调用sock();。然后启动recvfrom()流量。也许我错了,但是我看过一些不使用它的程序。 问题答案: 没错,您唯一需要做的就是打电话给then 。不过请注意,使用收听存在一些限制。 如果您不是在“发送后忘记”的基

  • 问题内容: 我有服务器和客户端。我的服务器接受所有连接并返回到客户端字符串。但是当我尝试发送更多行时,它崩溃了 这是我的服务器代码: 这是我的客户代码: 问题答案: 来自in中的javadoc: 关闭返回将关闭关联的套接字。 另外,关闭(和所有其他打印机/写入器)也将关闭其基础流。因此,您可以通过关闭(in ),然后尝试写入已关闭的套接字来关闭您的套接字。 要解决此问题,请不要关闭。垃圾收集将为您

  • 问题内容: 我遇到的情况是有两个领域。field1和field2。field2当field1更改时,我只想做空,反之亦然。因此,最后只有一个字段具有内容。 如果仅附加addTextChangedListener到它,效果很好field1,但是当我对两个字段都执行此操作时,应用程序将崩溃。显然是因为它们试图无限期地改变彼此。一旦field1更改,field2此刻 清除就会field2被更改,因此它将

  • **服务器** **客户** 并且我运行它,ip是环回(127.0.0.1),端口是7755。 客户端套接字的对等ip:127.0.0.1 客户端套接字的对等端口6311 -1 0 0 0 我的问题是,如果监听(服务器)套接字只处理客户端的连接,那么它的对等端不应该存在?那个错误的IP和端口是什么?只是垃圾值?

  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi