gpt4 book ai didi

android - 套接字连接: ECONNREFUSED

转载 作者:行者123 更新时间:2023-12-03 12:08:58 26 4
gpt4 key购买 nike

我用下面的代码连接到php websocket。

serverAddr = InetAddress.getByName(ip_str);
socket = new Socket(serverAddr, port_str);
mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));

试图打开一个套接字,并想听听来自服务器的数据。

ip_str是这样的:wss://xyz.com:8181/game其中xyz是实际的主机名,而8181是虚拟的端口号(已经给出了虚拟值,因为我不能在此处给出实际值-但它是在网络上正常工作,因为我们正尝试通过网络连接相同的套接字。

在这条线上:
socket = new Socket(serverAddr, port_str);

我收到以下错误消息:
java.net.ConnectException: failed to connect to ip6-localhost/::1 (port 8181): connect failed: ECONNREFUSED (Connection refused)

有人知道我为什么要面对这个问题吗?

最佳答案

如果ip_str是像"wss://xyz.com:8181/game"这样的完整URL,则以下行是完全错误的:

serverAddr = InetAddress.getByName(ip_str);

您不能将URL传递给 InetAddress.getByName()。它仅接受点分IP地址或主机名作为输入,例如:
serverAddr = InetAddress.getByName("xyz.com");

因此,使用 URI URL 类将URL解析为其组成部分,然后可以将主机名部分解析为IP地址,例如:
URI WebSocketUri = new URI("wss://xyz.com:8181/game"); // or URL
serverAddr = InetAddress.getByName(WebSocketUri.getHost());
...

或者,您可以让 Socket为您解析主机:
URI WebSocketUri = new URI("wss://xyz.com:8181/game"); // or URL
if (WebSocket.getScheme() == "wss")
socket = new SSLSocket(WebSocket.getHost(), WebSocket.getPort());
else
socket = new Socket(WebSocket.getHost(), WebSocket.getPort());
// send an HTTP request for WebSocket.getRawPath() and negotiate WebSocket handshake as needed...

或更妙的是,改用 URLConnection :
WebSocketUri = new URL("wss://xyz.com:8181/game");
URLConnection conn = WebSocketUri.openConnection();
...

或者,使用实际的第三方WebSocket库(Android中有很多可用的库)。

关于android - 套接字连接: ECONNREFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46074809/

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