我正在尝试(不成功)连接socket.io服务器,但我一直遇到同样的错误:
由io.socket.SocketIOException: Error while handshaking
引起的java.net.ConnectException: failed to connect to my.domain.name.com (port 8080) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
。
我刚刚发现握手时我应该发送一个包含以下值的cookie:域名,路径,名称和值。在尝试了几种可能的方法之后(基于this和this),我最终得到了这段代码,但它仍无效:
String cookieString = "domain=" + "my.domain.name.com" + ";path=" + "/" + ";name=" + "auth" + ";value=" + "XXXXXtokenXXXXX";
CookieManager.getInstance().setCookie("http://my.domain.name.com:8080/", cookieString);
String header = CookieManager.getInstance().getCookie("my.domain.name.com:8080/");
final SocketIO socket = new SocketIO("my.domain.name.com:8080/");
socket.addHeader("Cookie", header);
socket.connect(new IOCallback()
{
...
}
CookieManager.getInstance().getCookie(...)
一直返回null,连接仍然失败。
有人可以帮我在标题中添加一个cookie吗?
为了记录,我不知道它可以改变什么,但我正在使用这个库:https://github.com/Gottox/socket.io-java-client
提前感谢您的帮助!
马修
答案 0 :(得分:1)
好的,如果有人需要解决方案,我终于解决了这个问题。 这实际上非常简单:
String cookie = "domain=\"http://my.domain.name.com:80\";path=\"/\";name=\"auth\";value=\"XXXXtokenXXXX\"";
socket = new SocketIO("http://my.domain.name.com:80/");
socket.addHeader("Cookie", cookie);
socket.connect(new IOCallback()
{
...
}
因此,您只需要创建一个“key1 = value1; key2 = value2 ...”形式的字符串,并使用方法addHeader("Cookie", youCookieString);
将其作为标题添加到套接字。
为了记录,我不断收到错误ECONNREFUSED,因为我试图连接错误的端口(8080而不是80)...