当前位置:   article > 正文

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

android websockect 服务端

废话不多说直接上代码

首选导入

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

  1. package com.zx.qnncpds.androidwbsocket;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import androidx.appcompat.app.AppCompatActivity;
  7. import com.zx.qnncpds.androidwbsocket.client.ClientActivity;
  8. import com.zx.qnncpds.androidwbsocket.service.ServiceActivity;
  9. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  10. private Button btn1;
  11. private Button btn2;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. btn1 = findViewById(R.id.btn1);
  17. btn2 = findViewById(R.id.btn2);
  18. btn1.setOnClickListener(this);
  19. btn2.setOnClickListener(this);
  20. }
  21. @Override
  22. public void onClick(View v) {
  23. switch (v.getId()) {
  24. case R.id.btn1://客户端
  25. startActivity(new Intent(MainActivity.this, ClientActivity.class));
  26. break;
  27. case R.id.btn2://服务端
  28. startActivity(new Intent(MainActivity.this, ServiceActivity.class));
  29. break;
  30. default:
  31. break;
  32. }
  33. }
  34. }

布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. tools:context=".MainActivity">
  9. <Button
  10. android:id="@+id/btn1"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:text="客服端" />
  14. <Button
  15. android:id="@+id/btn2"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:text="服务端" />
  19. </LinearLayout>

客服端

  1. package com.zx.qnncpds.androidwbsocket.client;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import com.zx.qnncpds.androidwbsocket.R;
  7. import java.net.URI;
  8. import java.net.URISyntaxException;
  9. public class ClientActivity extends AppCompatActivity implements ClientWebSocketListener {
  10. private WebSocketClient webSocketClient;
  11. private Button btn_send;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_client);
  16. btn_send=findViewById(R.id.btn_send);
  17. btn_send.setOnClickListener(v -> sendMessage("测试消息"));
  18. try {
  19. // 替换为你的WebSocket服务器URI
  20. URI uri = new URI("ws://10.10.10.104:9007");
  21. webSocketClient = new WebSocketClient(uri, this);
  22. webSocketClient.connect();
  23. } catch (URISyntaxException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. /**
  28. * @param message 当WebSocket接收到消息时调用此方法
  29. */
  30. @Override
  31. public void onMessage(final String message) {
  32. }
  33. /**
  34. * @param message 连接打开
  35. */
  36. @Override
  37. public void onOpen(String message) {
  38. }
  39. /**
  40. * @param message 连接关闭
  41. */
  42. @Override
  43. public void onClose(String message) {
  44. }
  45. /**
  46. * @param message 出现错误
  47. */
  48. @Override
  49. public void onError(String message) {
  50. }
  51. public void sendMessage(String message) {
  52. // 发送一个消息到WebSocket服务器
  53. if (webSocketClient != null && webSocketClient.isOpen()) {
  54. webSocketClient.send(message);
  55. }
  56. }
  57. @Override
  58. protected void onDestroy() {
  59. super.onDestroy();
  60. // 关闭WebSocket连接以避免内存泄露
  61. if (webSocketClient != null) {
  62. webSocketClient.close();
  63. }
  64. }
  65. }

  1. package com.zx.qnncpds.androidwbsocket.client;
  2. public interface ClientWebSocketListener {
  3. /**
  4. * @param message 当WebSocket接收到消息时调用此方法
  5. */
  6. void onMessage(final String message);
  7. /**
  8. * @param message 连接打开
  9. */
  10. void onOpen(final String message);
  11. /**
  12. * @param message 连接关闭
  13. */
  14. void onClose(final String message);
  15. /**
  16. * @param message 出现错误
  17. */
  18. void onError(final String message);
  19. }

  1. package com.zx.qnncpds.androidwbsocket.client;
  2. import org.java_websocket.handshake.ServerHandshake;
  3. import java.net.URI;
  4. public class WebSocketClient extends org.java_websocket.client.WebSocketClient {
  5. private ClientWebSocketListener webSocketListener;
  6. public WebSocketClient(URI serverUri, ClientWebSocketListener listener) {
  7. super(serverUri);
  8. this.webSocketListener = listener;
  9. }
  10. @Override
  11. public void onOpen(ServerHandshake handshakeData) {
  12. System.out.println("WebSocket 连接打开");
  13. if (webSocketListener != null) {
  14. webSocketListener.onOpen("WebSocket 连接打开");
  15. }
  16. }
  17. @Override
  18. public void onMessage(String message) {
  19. if (webSocketListener != null) {
  20. webSocketListener.onMessage(message);
  21. }
  22. }
  23. @Override
  24. public void onClose(int code, String reason, boolean remote) {
  25. System.out.println("WebSocket 连接关闭");
  26. if (webSocketListener != null) {
  27. webSocketListener.onClose("WebSocket 连接关闭");
  28. }
  29. }
  30. @Override
  31. public void onError(Exception ex) {
  32. System.out.println("WebSocket 出现错误: " + ex.getMessage());
  33. if (webSocketListener != null) {
  34. webSocketListener.onError("WebSocket 出现错误: " + ex.getMessage());
  35. }
  36. }
  37. }

服务端

  1. package com.zx.qnncpds.androidwbsocket.service;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.TextView;
  5. import com.zx.qnncpds.androidwbsocket.R;
  6. import org.java_websocket.WebSocket;
  7. import java.io.IOException;
  8. public class ServiceActivity extends Activity implements ServiceWebSocketListener {
  9. // WebSocket服务器的实例
  10. private AndroidWebSocketServer server;
  11. private TextView tv_state;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_service);
  16. tv_state=findViewById(R.id.tv_state);
  17. // 创建并启动WebSocket服务器
  18. server = new AndroidWebSocketServer(8887, this);
  19. server.start();
  20. }
  21. @Override
  22. public void onClientOpen(WebSocket conn, String address) {
  23. runOnUiThread(() -> {
  24. // 更新UI显示连接的客户端的地址
  25. // 例如:更新一个文本视图来显示已连接
  26. tv_state.setText(address);
  27. });
  28. }
  29. @Override
  30. public void onClientClose(WebSocket conn, int code, String reason, boolean remote) {
  31. runOnUiThread(() -> {
  32. // 更新UI以表示客户端断开连接
  33. // 例如:更新列表视图中的项目
  34. tv_state.setText("客户端以断开");
  35. });
  36. }
  37. @Override
  38. public void onClientMessage(WebSocket conn, String message) {
  39. runOnUiThread(() -> {
  40. // 在UI上展示收到的消息
  41. // 例如:将消息添加到聊天窗口
  42. tv_state.setText(message);
  43. });
  44. }
  45. @Override
  46. public void onClientError(WebSocket conn, Exception ex) {
  47. runOnUiThread(() -> {
  48. // 在UI上展示错误信息
  49. // 例如:展示一个错误弹窗
  50. });
  51. }
  52. @Override
  53. public void onServerStart() {
  54. runOnUiThread(() -> {
  55. // 更新UI表示服务器已经启动
  56. // 例如:改变一个文本视图的文本
  57. tv_state.setText("服务器已启动");
  58. });
  59. }
  60. @Override
  61. protected void onDestroy() {
  62. super.onDestroy();
  63. if (server != null) {
  64. try {
  65. server.stop();
  66. } catch (IOException | InterruptedException e) {
  67. throw new RuntimeException(e);
  68. }
  69. }
  70. }
  71. // 广播消息给所有WebSocket客户端
  72. public void broadcastToAll(String message) {
  73. server.broadcastMessage(message);
  74. }
  75. // 发送消息给特定的WebSocket客户端
  76. public void sendToClient(WebSocket client, String message) {
  77. server.sendMessageToClient(client, message);
  78. }
  79. }

  1. package com.zx.qnncpds.androidwbsocket.service;
  2. import org.java_websocket.WebSocket;
  3. import org.java_websocket.handshake.ClientHandshake;
  4. import org.java_websocket.server.WebSocketServer;
  5. import java.net.InetSocketAddress;
  6. public class AndroidWebSocketServer extends WebSocketServer {
  7. // 事件监听器,用于将事件通知给ServiceActivity
  8. private ServiceWebSocketListener serviceWebSocketListener;
  9. /**
  10. * 构造函数。
  11. * @param port 服务器侦听的端口号。
  12. * @param serviceWebSocketListener 事件发生时的回调监听器。
  13. */
  14. public AndroidWebSocketServer(int port, ServiceWebSocketListener serviceWebSocketListener) {
  15. super(new InetSocketAddress(port));
  16. this.serviceWebSocketListener = serviceWebSocketListener;
  17. }
  18. public AndroidWebSocketServer(int port) {
  19. super(new InetSocketAddress(port));
  20. }
  21. @Override
  22. public void onOpen(WebSocket conn, ClientHandshake handshake) {
  23. // 客户端连接打开时调用监听器的onClientOpen方法
  24. String address = conn.getRemoteSocketAddress().getAddress().getHostAddress();
  25. serviceWebSocketListener.onClientOpen(conn, address);
  26. }
  27. @Override
  28. public void onClose(WebSocket conn, int code, String reason, boolean remote) {
  29. // 客户端连接关闭时调用监听器的onClientClose方法
  30. String address = conn.getRemoteSocketAddress().getAddress().getHostAddress();
  31. serviceWebSocketListener.onClientClose(conn, code, reason, remote);
  32. }
  33. @Override
  34. public void onMessage(WebSocket conn, String message) {
  35. // 接收到客户端消息时调用监听器的onClientMessage方法
  36. serviceWebSocketListener.onClientMessage(conn, message);
  37. }
  38. @Override
  39. public void onError(WebSocket conn, Exception ex) {
  40. // 连接发生错误时调用监听器的onClientError方法
  41. serviceWebSocketListener.onClientError(conn, ex);
  42. }
  43. @Override
  44. public void onStart() {
  45. // WebSocket服务器启动时调用监听器的onServerStart方法
  46. serviceWebSocketListener.onServerStart();
  47. }
  48. // 发送消息到所有连接的WebSocket客户端
  49. public void broadcastMessage(String message) {
  50. broadcast(message);
  51. }
  52. // 发送消息到特定的WebSocket客户端
  53. public void sendMessageToClient(WebSocket conn, String message) {
  54. if (conn != null) {
  55. conn.send(message);
  56. }
  57. }
  58. }

  1. package com.zx.qnncpds.androidwbsocket.service;
  2. import org.java_websocket.WebSocket;
  3. public interface ServiceWebSocketListener {
  4. /**当客户端连接打开时调用
  5. * @param conn
  6. * @param address
  7. */
  8. void onClientOpen(WebSocket conn, String address);
  9. // 当客户端连接关闭时调用
  10. /** 当客户端连接关闭时调用
  11. * @param conn
  12. * @param code
  13. * @param reason
  14. * @param remote
  15. */
  16. void onClientClose(WebSocket conn, int code, String reason, boolean remote);
  17. /**当接收到客户端消息时调用
  18. * @param conn
  19. * @param message
  20. */
  21. void onClientMessage(WebSocket conn, String message);
  22. /**
  23. * 当客户端连接发生错误时调用
  24. * @param conn
  25. * @param ex
  26. */
  27. void onClientError(WebSocket conn, Exception ex);
  28. /**
  29. *当WebSocket服务器启动时调用
  30. */
  31. void onServerStart();
  32. }

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/758362
推荐阅读
相关标签
  

闽ICP备14008679号