Java AndroidSync WebSocket不工作

Java AndroidSync WebSocket不工作,java,android,websocket,socket.io,androidasync-koush,Java,Android,Websocket,Socket.io,Androidasync Koush,我使用koush的这个库来创建websocket(服务器/客户端)并在两个android设备之间传输数据。这两个设备通过wifi连接(一个是wifi AP,另一个连接到它)。在发送请求4-5秒后,我在客户端设备中获得TimeoutException。 这就是我到目前为止所做的 ServerActivity.java protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState

我使用koush的这个库来创建websocket(服务器/客户端)并在两个android设备之间传输数据。这两个设备通过wifi连接(一个是wifi AP,另一个连接到它)。在发送请求4-5秒后,我在客户端设备中获得TimeoutException。 这就是我到目前为止所做的

ServerActivity.java

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_server);

    mSockets = new ArrayList<WebSocket>();
    mAsyncHttpServer = new AsyncHttpServer();
    mWebSocketCallback = new AsyncHttpServer.WebSocketRequestCallback() {
        @Override
        public void onConnected(final WebSocket webSocket, RequestHeaders headers) {
            mSockets.add(webSocket);
            webSocket.send("Welcome Client");
            webSocket.setClosedCallback(new CompletedCallback() {
                @Override
                public void onCompleted(Exception ex) {
                    try {
                        if (ex != null)
                            Log.e("WebSocket", "Error");
                    } finally {
                        mSockets.remove(webSocket);
                    }
                }
            });
            webSocket.setStringCallback(new WebSocket.StringCallback() {
                @Override
                public void onStringAvailable(String s) {
                    Log.d("SERVERTAG",s);
                    Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
                }
            });
        }
    };

    mAsyncHttpServer.websocket("/",mWebSocketCallback);
    mAsyncHttpServer.listen(Utils.PORT_NUMBER);

    Button sendButton = (Button) findViewById(R.id.sendButtonS);
    sendButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            for(WebSocket socket : mSockets) {
                socket.send("Server sent a string");
            }
        }
    });

}
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_client);
    mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    //Resolve IP address
    int ipAddress = mWifiManager.getConnectionInfo().getIpAddress();
    String hostAddress = Formatter.formatIpAddress(ipAddress);
    hostAddress = "http://" + hostAddress + ":" +Utils.PORT_NUMBER;
    Log.d("CLIENTTAG", "address is " + hostAddress);

    mWebSocketConnectCallback = new AsyncHttpClient.WebSocketConnectCallback() {
        @Override
        public void onCompleted(Exception ex, WebSocket webSocket) {
            if (ex != null) {
                ex.printStackTrace();
                return;
            }
            webSocket.send("Hello Server");
            webSocket.setStringCallback(new WebSocket.StringCallback() {
                @Override
                public void onStringAvailable(String s) {
                    Log.d("CLIENTTAG",s);
                    Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
                }
            });
        }
    };
    mAsyncHttpClient = AsyncHttpClient.getDefaultInstance();
    mAsyncHttpClient.websocket(hostAddress, null, mWebSocketConnectCallback);

}
这是我在客户端设备的logcat中得到的

10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ java.util.concurrent.TimeoutException
10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ at com.koushikdutta.async.http.AsyncHttpClient$2.run(AsyncHttpClient.java:240)
10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ at com.koushikdutta.async.AsyncServer.lockAndRunQueue(AsyncServer.java:683)
10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ at com.koushikdutta.async.AsyncServer.runLoop(AsyncServer.java:700)
10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ at com.koushikdutta.async.AsyncServer.run(AsyncServer.java:608)
10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ at com.koushikdutta.async.AsyncServer.access$700(AsyncServer.java:37)
10-21 19:50:49.289      742-945/com.haloappstudio.musichub W/System.err﹕ at com.koushikdutta.async.AsyncServer$13.run(AsyncServer.java:557)
我以前没有真正做过套接字编程。有人能帮我吗


非常感谢您的帮助。

在客户端,您是否尝试过在您的空地址传递http

mAsyncHttpClient.websocket(主机地址,null,mWebSocketConnectCallback)

也许试试

mAsyncHttpClient.websocket(主机地址,http,mWebSocketConnectCallback)


此外,当您提到两台连接到Wifi的设备时,第二台设备“连接到它”是什么意思。(将通过评论澄清这一点,但没有足够的要点)连接到演示服务器时可能没有收到正确的IP地址。

我发现了问题,因为@jrandaz说问题在于服务器的IP地址

原来

WifiManager.getConnectionInfo().getIpAddress()

返回设备自己的IP地址,而不是其所连接的wifi热点设备的地址。
我使用了
192.168.43.1
,这是android中wifi热点的默认IP地址,它起作用了。

我的意思是第二台设备连接到第一台设备的wifi热点。