Tôi đang sử dụng thư viện AndroidSync này bởi koush để tạo websocket (máy chủ/ứng dụng khách) và truyền dữ liệu giữa hai thiết bị Android. Hai thiết bị được kết nối thông qua wifi (một là Wifi AP và khác được kết nối với nó). Tôi nhận được TimeoutException trong thiết bị khách sau 4-5 giây gửi yêu cầu. Đây là những gì tôi đã làm cho đến nay ..Ổ cắm web AndroidAsync không hoạt động
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");
}
}
});
}
ClientActivity.java
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);
}
Đây là những gì tôi nhận được trong logcat trong thiết bị của khách hàng.
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)
Tôi chưa thực sự lập trình socket trước đây. Bất cứ ai có thể vui lòng giúp tôi ra khỏi đây?
Mọi trợ giúp đều được đánh giá cao.
Tôi có nghĩa là thiết bị thứ hai được kết nối với điểm phát sóng wifi của thiết bị đầu tiên. – suheb