gpt4 book ai didi

android - EADDRINUSE 在 google glass 上创建服务器套接字时

转载 作者:行者123 更新时间:2023-11-30 02:37:37 26 4
gpt4 key购买 nike

我正在开发一个 google glass/android 应用程序。它是一个视频流应用程序,具有服务器/客户端设置,其中电话/眼镜是服务器,并将 pc 与播放视频的 session 描述 Hook 。它在 android 上运行良好,一切运行良好,但当我尝试在 google glass 上测试它时,它会在这一行抛出错误

sSocket = new ServerSocket(sPort);

异常消息显示“EADDRINUSE”,我假设这意味着端口已经打开,但我从未打开过它。即使我已经打开它并且我的程序没有关闭它我更改了几次端口但它仍然说它正在使用中。

谢谢

最佳答案

泰勒,

Google Glass 与 android 一样,其许多端口始终会被在后台运行的应用程序占用。在为服务器创建套接字以进行监听时,您有两种选择:

1) 有一个预先确定的端口列表,您可以选择让您的服务器监听。

如果你选择这样做,那么你可以简单地拥有一个包含所有端口的数据结构(列表、队列、堆[如果你有一些你想使用的端口的优先级],等等),那么你可以简单地遍历它们,直到找到一个开放的端口。

这可以通过以下方式实现:

private ServerSocket allocatePort(List<Integer> myArray) throws IOException {
for (int individualPort : myArray) {
try {
return new ServerSocket(individualPort);
} catch (IOException io) {
continue; // An exception will be thrown if this port is currently in use. It's OK, let's try another port.
}
}

// When no ports are available, let's throw an exception stating we were unable to find an open port.
throw new IOException("we were unable to find an open port");
}

然后只需按如下方式在您的内部调用此方法:

int[] arrayOfPorts = {5000, 5001, 5002, 8000, 8001, 8002, 8003};
List<Integer> myArray = new ArrayList<>();
myArray = IntStream.of(arrayOfPorts).boxed().collect(Collectors.toList());
ServerSocket sSocket = allocatePort(myArray);

2) 如果您不介意监听哪个端口,您可以使用构造函数选择任何可用端口。

这可以通过以下方式实现:

  ServerSocket sSocket = new ServerSocket(0);

您可以在 ServerSocket 的 Javadocs 上阅读更多内容.参数小节下的注意事项:

  port - the port number, or 0 to use a port number that is automatically allocated.

如有任何问题,请告诉我!

关于android - EADDRINUSE 在 google glass 上创建服务器套接字时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com