一、先讲解客户端安卓的步骤:
1、使用okhttpClient来请求websocket
OkHttpClient okHttpClient=new OkHttpClient();
String ip="192.168.43.17";
//这里是ws开头,需要注意,后面的路径是项目名/和websocket的注解
// @ServerEndpoint(value="/chat")
Request request=new Request.Builder().url("ws://"+ip+":2212/websocket/chat").build();
//先用okhttp进行握手,握手完成之后就用ws来发送和接收了
WebSocket ws= okHttpClient.newWebSocket(request,new Listener()); //new Listener()是回调异步事件。
2、拿到websocket对象就可以发送数据了
ws.send("hello");
3、接收数据
tv.append("\n"+text); //接收消息
4、实现继承WebSocketListener的类
private class Listener extends WebSocketListener{
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
}
//当服务器返回数据时候就会回调这个方法。
@Override
public void onMessage(WebSocket webSocket,final String text) {
super.onMessage(webSocket, text);
runOnUiThread(new Runnable() {
public void run() {
tv.append("\n"+text); //接收消息
}
});
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
super.onClosed(webSocket, code, reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
}
}
5、整个客户端代码
package com.cqvie;
import okhttp3.*;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv;
Button bConnect,bSend;
OkHttpClient okHttpClient;
WebSocket ws;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.textview1);
bConnect=(Button)findViewById(R.id.button1);
bSend=(Button)findViewById(R.id.button2);
bConnect.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
okHttpClient=new OkHttpClient();
String ip="192.168.43.17";
Request request=new Request.Builder().url("ws://"+ip+":2212/websocket/chat").build();
//先用okhttp进行握手,握手完成之后就用ws来发送和接收了
ws= okHttpClient.newWebSocket(request,new Listener());
}
});
bSend.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
ws.send("Hello!"); //发送消息,
}
});
}
private class Listener extends WebSocketListener{
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
}
@Override
public void onMessage(WebSocket webSocket,final String text) {
super.onMessage(webSocket, text);
runOnUiThread(new Runnable() {
public void run() {
tv.append("\n"+text); //接收消息
}
});
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
super.onClosed(webSocket, code, reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
}
}
}
二、服务器响应
1、在类的上面添加注解@ServerEndpoint
@ServerEndpoint(value="/chat")
public class Chat {
2、在方法上面添加注解@OnMessage
只要客户端发送数据,这里就会接受到消息,内容就是msg
@OnMessage
public void echoTextMessage(Session session, String msg, boolean last) {
try {
//先判断回话是否打开
if (session.isOpen()) {
//发回去
session.getBasicRemote().sendText("回复:"+msg, last);
}
} catch (IOException e) {
try {
session.close();
} catch (IOException e1) { }
}
}
3、整个服务器代码
package com.cqvie;
import java.io.IOException;
import java.nio.ByteBuffer;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value="/chat")
public class Chat {
@OnMessage
public void echoTextMessage(Session session, String msg, boolean last) {
try {
//先判断回话是否打开
if (session.isOpen()) {
//发回去
session.getBasicRemote().sendText("回复:"+msg, last);
}
} catch (IOException e) {
try {
session.close();
} catch (IOException e1) { }
}
}
@OnMessage
public void echoBinaryMessage(Session session, ByteBuffer bb,
boolean last) {
try {
if (session.isOpen()) {
session.getBasicRemote().sendBinary(bb, last);
}
} catch (IOException e) {
try {
session.close();
} catch (IOException e1) { }
}
}
}
简单的对话功能,就可以了。