websocket与安卓通信讲解和使用。

一、先讲解客户端安卓的步骤:

    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) {  }
        }
    }
}

简单的对话功能,就可以了。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值