Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么android上的套接字服务器总是监听IPv6?_Android_Sockets_Ipv6_Ipv4 - Fatal编程技术网

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

为什么android上的套接字服务器总是监听IPv6?,android,sockets,ipv6,ipv4,Android,Sockets,Ipv6,Ipv4,我启动了一个服务器套接字,希望它监听环回地址(127.0.0.1)。代码如下: Inet4Address address = (Inet4Address) Inet4Address.getByName("localhost"); TServerSocket server = new TServerSocket(new InetSocketAddress(address ,1234)); ......... public class TServerSocket{ ...... public

我启动了一个服务器套接字,希望它监听环回地址(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() + ".");
 }
  }
   ......
}
但是我发现这个套接字开始监听一个IPv6地址:ffff:127.0.0.1,并使用命令“netstat”,然后 导致在另一个进程(Python)中运行的客户端无法通过“127.0.0.1”连接到此服务器


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

它没有将IPV4地址映射到IPv6
Inet4Address
Inet6Address
没有实现
getByName()
方法,因此您实际上使用的是从
InetAddress
继承的方法。如果主机可以通过IPv4和IPv6访问,大多数操作系统都会选择IPv6而不是IPv4(您也应该如此:)。您可以尝试通过
InetAddress.getAllByName(“localhost”)
获取地址数组,然后检查地址是否为
Inet4Address
(或者在其他情况下为
Inet6Address
)的实例,但本例最简单的解决方案是硬编码环回地址(127.0.0.1)因为它实际上没有改变的机会。

它本身并没有监听IPv6,netstat(Android上)只是打印出编码为IPv6地址的IPv4地址(127.0.0.1)。即使网络仅为IPv4,它也会对所有套接字执行此操作


更多详细信息:

您在Android上运行Python的具体情况如何?可能与