Здравствуйте, пишу сетевое приложение, которое обменивается данными с сервером через WebSocket.
Клиент работает на Android
Серверная часть крутится у меня на компе) ее писал тоже на Java.
Для клиента и сервера использовал одну
библиотеку
Сервер реализовал вот так:
import java.net.InetSocketAddress;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
public class SimpleServer extends WebSocketServer {
public SimpleServer(InetSocketAddress address) {
super(address);
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println("new connection to " + conn.getRemoteSocketAddress());
conn.send("Привет!");
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
System.out.println("closed " + conn.getRemoteSocketAddress() + " with exit code " + code + " additional info: " + reason);
}
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("received message from " + conn.getRemoteSocketAddress() + ": " + message);
}
@Override
public void onError(WebSocket conn, Exception ex) {
System.err.println("an error occured on connection " + conn.getRemoteSocketAddress() + ":" + ex);
}
public static void main(String[] args) {
String host = "172.16.16.11";
int port = 1122;
WebSocketServer server = new SimpleServer(new InetSocketAddress(host, port));
server.run();
}
}
Вот как реализовал клиент:
package ru.domen.myapplication;
import android.util.Log;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.java_websocket.drafts.Draft;
import java.net.URI;
class SoketWS extends WebSocketClient{
public SoketWS(URI serverURI, Draft draft) {
super(serverURI);
}
public SoketWS(URI serverURI) {
super(serverURI);
}
@Override
public void onOpen(ServerHandshake handshakedata) {
Log.d("test","есть контакт");
}
@Override
public void onMessage(String message) {
Log.d("test","Server: "+ message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
Log.d("test","Close");
}
@Override
public void onError(Exception ex) {
}
}
Вот часть кода в MainActivity которая создает экземпляр клиента:
try{
WebSocketClient client = new SoketWS(new URI("ws://172.16.16.11:1122"), new Draft_10());
client.connect();
client.send("Привет");
}catch (URISyntaxException e){
Log.d("test", "Не удалось подключиться к серверу");
}
catch (RuntimeException e){
Log.d("test", "Исключение какое то с подключением");
}
Для теста логика такая:
1 клиент подключается к серверу, на сервере выводится на экран то что клиент с таким то адресом подключился.
2 сервер посылает клиенту сообщение "Привет!"
3 клиент посылает серверу сообщение "привет!" но до сервера данное сообщение не доходит. Вываливается исключение
RuntimeException:
07-31 10:43:13.008 19689-19689/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: ru.domen.myapplication, PID: 19689
java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.domen.myapplication/ru.domen.myapplication.MainActivity}: org.java_websocket.exceptions.WebsocketNotConnectedException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Caused by: org.java_websocket.exceptions.WebsocketNotConnectedException
at org.java_websocket.WebSocketImpl.send(WebSocketImpl.java:566)
at org.java_websocket.WebSocketImpl.send(WebSocketImpl.java:543)
at org.java_websocket.client.WebSocketClient.send(WebSocketClient.java:171)
at ru.domen.myapplication.MainActivity.onCreate(MainActivity.java:167)
at android.app.Activity.performCreate(Activity.java:5264)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Ошибка возникает вот в этой строке:
client.send("Привет");
В чем может быть проблема? Может я что то в манифесте не прописал?
Заранее большое спасибо!