如何将服务器套接字绑定到特定的IP地址?

12

如果我有一个表示IP地址(IPv4或IPv6)的String,我如何创建一个ServerSocket并绑定到这个IP,而不关心传入的IP是IPv4还是IPv6?
我看到有一个构造函数:ServerSocket(int port, int backlog, InetAddress bindAddr),但是InetAddress似乎没有提供任何构造函数,其子类具有特定于IPv4和IPv6的名称。
那么我该如何将套接字绑定到IP呢?

1个回答

35
可以使用工厂方法INetAddress.getByName,它会自动确定使用哪个子类。例如:
InetAddress addr = InetAddress.getByName("127.0.0.1");
// or
InetAddress addr = InetAddress.getByName("::1");

// and now you can pass it to your socket-constructor
ServerSocket sock = new ServerSocket(1234, 50, addr);

你的意思是传入我的IP地址,然后返回对象吗? - Jim
@Jim:是的,完全正确!我已经添加了一个如何使用它的示例。 - vstm
4
注意:默认的“backlog”为50:D。 - user2889419
2
另一个注意事项:使用 0 作为 backlog 将使用默认值。 - kapex
1
什么是“待办事项列表”? - Eboubaker
使用"127.0.0.1"仍然会在adb shell中通过netstat -letW显示生成一个IPv6服务器。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接