当前位置: 首页 > news >正文

安卓websocket(客服端和服务端写在app端) 案例

废话不多说直接上代码

首选导入

    implementation "org.java-websocket:Java-WebSocket:1.4.0"

package com.zx.qnncpds.androidwbsocket;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;import androidx.appcompat.app.AppCompatActivity;import com.zx.qnncpds.androidwbsocket.client.ClientActivity;
import com.zx.qnncpds.androidwbsocket.service.ServiceActivity;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn1;private Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = findViewById(R.id.btn1);btn2 = findViewById(R.id.btn2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn1://客户端startActivity(new Intent(MainActivity.this, ClientActivity.class));break;case R.id.btn2://服务端startActivity(new Intent(MainActivity.this, ServiceActivity.class));break;default:break;}}
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="客服端" /><Buttonandroid:id="@+id/btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="服务端" />
</LinearLayout>

客服端

package com.zx.qnncpds.androidwbsocket.client;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;import com.zx.qnncpds.androidwbsocket.R;import java.net.URI;
import java.net.URISyntaxException;public class ClientActivity extends AppCompatActivity implements ClientWebSocketListener {private WebSocketClient webSocketClient;private Button btn_send;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_client);btn_send=findViewById(R.id.btn_send);btn_send.setOnClickListener(v -> sendMessage("测试消息"));try {// 替换为你的WebSocket服务器URIURI uri = new URI("ws://10.10.10.104:9007");webSocketClient = new WebSocketClient(uri, this);webSocketClient.connect();} catch (URISyntaxException e) {e.printStackTrace();}}/*** @param message 当WebSocket接收到消息时调用此方法*/@Overridepublic void onMessage(final String message) {}/*** @param message 连接打开*/@Overridepublic void onOpen(String message) {}/*** @param message 连接关闭*/@Overridepublic void onClose(String message) {}/*** @param message 出现错误*/@Overridepublic void onError(String message) {}public void sendMessage(String message) {// 发送一个消息到WebSocket服务器if (webSocketClient != null && webSocketClient.isOpen()) {webSocketClient.send(message);}}@Overrideprotected void onDestroy() {super.onDestroy();// 关闭WebSocket连接以避免内存泄露if (webSocketClient != null) {webSocketClient.close();}}
}

package com.zx.qnncpds.androidwbsocket.client;public interface ClientWebSocketListener {/*** @param message 当WebSocket接收到消息时调用此方法*/void onMessage(final String message);/*** @param message 连接打开*/void onOpen(final String message);/*** @param message 连接关闭*/void onClose(final String message);/*** @param message 出现错误*/void onError(final String message);
}

package com.zx.qnncpds.androidwbsocket.client;import org.java_websocket.handshake.ServerHandshake;import java.net.URI;public class WebSocketClient extends org.java_websocket.client.WebSocketClient {private ClientWebSocketListener webSocketListener;public WebSocketClient(URI serverUri, ClientWebSocketListener listener) {super(serverUri);this.webSocketListener = listener;}@Overridepublic void onOpen(ServerHandshake handshakeData) {System.out.println("WebSocket 连接打开");if (webSocketListener != null) {webSocketListener.onOpen("WebSocket 连接打开");}}@Overridepublic void onMessage(String message) {if (webSocketListener != null) {webSocketListener.onMessage(message);}}@Overridepublic void onClose(int code, String reason, boolean remote) {System.out.println("WebSocket 连接关闭");if (webSocketListener != null) {webSocketListener.onClose("WebSocket 连接关闭");}}@Overridepublic void onError(Exception ex) {System.out.println("WebSocket 出现错误: " + ex.getMessage());if (webSocketListener != null) {webSocketListener.onError("WebSocket 出现错误: " + ex.getMessage());}}
}

服务端

package com.zx.qnncpds.androidwbsocket.service;import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;import com.zx.qnncpds.androidwbsocket.R;import org.java_websocket.WebSocket;import java.io.IOException;public class ServiceActivity extends Activity implements ServiceWebSocketListener {// WebSocket服务器的实例private AndroidWebSocketServer server;private TextView tv_state;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_service);tv_state=findViewById(R.id.tv_state);// 创建并启动WebSocket服务器server = new AndroidWebSocketServer(8887, this);server.start();}@Overridepublic void onClientOpen(WebSocket conn, String address) {runOnUiThread(() -> {// 更新UI显示连接的客户端的地址// 例如:更新一个文本视图来显示已连接tv_state.setText(address);});}@Overridepublic void onClientClose(WebSocket conn, int code, String reason, boolean remote) {runOnUiThread(() -> {// 更新UI以表示客户端断开连接// 例如:更新列表视图中的项目tv_state.setText("客户端以断开");});}@Overridepublic void onClientMessage(WebSocket conn, String message) {runOnUiThread(() -> {// 在UI上展示收到的消息// 例如:将消息添加到聊天窗口tv_state.setText(message);});}@Overridepublic void onClientError(WebSocket conn, Exception ex) {runOnUiThread(() -> {// 在UI上展示错误信息// 例如:展示一个错误弹窗});}@Overridepublic void onServerStart() {runOnUiThread(() -> {// 更新UI表示服务器已经启动// 例如:改变一个文本视图的文本tv_state.setText("服务器已启动");});}@Overrideprotected void onDestroy() {super.onDestroy();if (server != null) {try {server.stop();} catch (IOException | InterruptedException e) {throw new RuntimeException(e);}}}// 广播消息给所有WebSocket客户端public void broadcastToAll(String message) {server.broadcastMessage(message);}// 发送消息给特定的WebSocket客户端public void sendToClient(WebSocket client, String message) {server.sendMessageToClient(client, message);}
}

package com.zx.qnncpds.androidwbsocket.service;import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;import java.net.InetSocketAddress;public class AndroidWebSocketServer extends WebSocketServer {// 事件监听器,用于将事件通知给ServiceActivityprivate ServiceWebSocketListener serviceWebSocketListener;/*** 构造函数。* @param port 服务器侦听的端口号。* @param serviceWebSocketListener 事件发生时的回调监听器。*/public AndroidWebSocketServer(int port, ServiceWebSocketListener serviceWebSocketListener) {super(new InetSocketAddress(port));this.serviceWebSocketListener = serviceWebSocketListener;}public AndroidWebSocketServer(int port) {super(new InetSocketAddress(port));}@Overridepublic void onOpen(WebSocket conn, ClientHandshake handshake) {// 客户端连接打开时调用监听器的onClientOpen方法String address = conn.getRemoteSocketAddress().getAddress().getHostAddress();serviceWebSocketListener.onClientOpen(conn, address);}@Overridepublic void onClose(WebSocket conn, int code, String reason, boolean remote) {// 客户端连接关闭时调用监听器的onClientClose方法String address = conn.getRemoteSocketAddress().getAddress().getHostAddress();serviceWebSocketListener.onClientClose(conn, code, reason, remote);}@Overridepublic void onMessage(WebSocket conn, String message) {// 接收到客户端消息时调用监听器的onClientMessage方法serviceWebSocketListener.onClientMessage(conn, message);}@Overridepublic void onError(WebSocket conn, Exception ex) {// 连接发生错误时调用监听器的onClientError方法serviceWebSocketListener.onClientError(conn, ex);}@Overridepublic void onStart() {// WebSocket服务器启动时调用监听器的onServerStart方法serviceWebSocketListener.onServerStart();}// 发送消息到所有连接的WebSocket客户端public void broadcastMessage(String message) {broadcast(message);}// 发送消息到特定的WebSocket客户端public void sendMessageToClient(WebSocket conn, String message) {if (conn != null) {conn.send(message);}}
}

package com.zx.qnncpds.androidwbsocket.service;import org.java_websocket.WebSocket;public interface ServiceWebSocketListener {/**当客户端连接打开时调用* @param conn* @param address*/void onClientOpen(WebSocket conn, String address);// 当客户端连接关闭时调用/** 当客户端连接关闭时调用* @param conn* @param code* @param reason* @param remote*/void onClientClose(WebSocket conn, int code, String reason, boolean remote);/**当接收到客户端消息时调用* @param conn* @param message*/void onClientMessage(WebSocket conn, String message);/***  当客户端连接发生错误时调用* @param conn* @param ex*/void onClientError(WebSocket conn, Exception ex);/***当WebSocket服务器启动时调用*/void onServerStart();
}

布局加一个文本这就不写了(服务端和客服端都一样)

项目案例 https://download.csdn.net/download/qq_41733851/88885469?spm=1001.2014.3001.5503

http://www.lryc.cn/news/310600.html

相关文章:

  • C++面试宝典第34题:整数反序
  • 微信商城小程序设计
  • 如何合理布局子图--确定MATLAB的subplot子图位置参数
  • 【MySQL】基于Docker搭建MySQL一主二从集群
  • k8s 集群调度,标签,亲和性和反亲和性,污点和容忍,pod启动状态 排错详解
  • Idea 启动报错 failed to create jvm:jvm path url
  • 20款Visual Studio实用插件推荐
  • 基于SpringBoot的在线拍卖系统
  • “互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑
  • AI大全-通往AGI之路
  • CSS中如何解决 1px 问题?
  • IO 与 NIO
  • YOLOv应用开发与实现
  • 【C语言】熟悉文件基础知识
  • 信息系统安全与对抗-作业2
  • 【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图
  • Ubuntu20.04使用XRDP安装原生远程桌面
  • uniapp:启动图 .9png 制作教程
  • NVMFS5113PLWFT1G汽车级功率MOSFET 60V 10A/64A满足AEC-Q101标准
  • 设计表时,如何选择正确的数据类型
  • iZotope RX 7 Advanced:音频修复与编辑的巅峰之作
  • Mac 制作可引导安装器
  • 深入了解 JavaScript 混淆加密和环境检测
  • 可让照片人物“开口说话”阿里图生视频模型EMO,高启强普法
  • 全国产飞腾E2000Q +复旦微FPGA的轨道交通、电力解决方案
  • 292.【华为OD机试】跳马问题(广度优先搜索(BFS)JavaPythonC++JS实现)
  • Qt 中Qwidget相关属性
  • matplotlib散点图
  • day32贪心算法 part02
  • 判断docker 镜像启动成功 shell脚本