package com.example.appdemos;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
import okio.ByteString;
public class Main2Activity extends Activity implements View.OnClickListener{
private Button btnStart;
private TextView tvOutput;
private WebSocket mSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btnStart = (Button) findViewById(R.id.start);
tvOutput = (TextView) findViewById(R.id.output);
btnStart.setOnClickListener(this);
}
private void start() {
OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(3, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(3, TimeUnit.SECONDS)//设置写的超时时间
.connectTimeout(3, TimeUnit.SECONDS)//设置连接超时时间
.build();
Request request = new Request.Builder().url("ws://demos.kaazing.com/echo").build();
EchoWebSocketListener socketListener = new EchoWebSocketListener();
mOkHttpClient.newWebSocket(request, socketListener);
mOkHttpClient.dispatcher().executorService().shutdown();
}
/**
* @param v The view that was clicked.
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start://开始连接
start();
break;
}
}
private final class EchoWebSocketListener extends WebSocketListener {
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
mSocket = webSocket;
String openid = "1";
//连接成功后,发送登录信息
String message = "{"type":"login","user_id":""+openid+""}";
mSocket.send(message);
output("连接成功!");
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
super.onMessage(webSocket, bytes);
output("receive bytes:" + bytes.hex());
}
@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
output("receive text:" + text);
//收到服务器端发送来的信息后,每隔25秒发送一次心跳包
final String message = "{"type":"heartbeat","user_id":"heartbeat"}";
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
mSocket.send(message);
}
},100);
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
super.onClosed(webSocket, code, reason);
output("closed:" + reason);
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
super.onClosing(webSocket, code, reason);
output("closing:" + reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
output("failure:" + t.getMessage());
}
}
private void output(final String text) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvOutput.setText(tvOutput.getText().toString() + "nn" + text);
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<Button
android:id="@+id/start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="连接"
android:textSize="17sp"/>
<TextView
android:id="@+id/output"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="16sp"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
最后
以上就是刻苦银耳汤最近收集整理的关于OkHttpClient webSocket实现心跳包的全部内容,更多相关OkHttpClient内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复