小工具知识网

当前位置: 首页 > 行业知识 > 安卓websocket(客服端和服务端写在app端) 案例

行业知识

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

2026-11-10 00:48:09 来源:互联网转载

废话不多说直接上代码

首选导入

    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;    @Override    protected 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);    }    @Override    public 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;        }    }}

布局

        

客服端

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;    @Override    protected 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服务器URI            URI uri = new URI("ws://10.10.10.104:9007");            webSocketClient = new WebSocketClient(uri, this);            webSocketClient.connect();        } catch (URISyntaxException e) {            e.printStackTrace();        }    }    /**     * @param message 当WebSocket接收到消息时调用此方法     */    @Override    public void onMessage(final String message) {    }    /**     * @param message 连接打开     */    @Override    public void onOpen(String message) {    }    /**     * @param message 连接关闭     */    @Override    public void onClose(String message) {    }    /**     * @param message 出现错误     */    @Override    public void onError(String message) {    }    public void sendMessage(String message) {        // 发送一个消息到WebSocket服务器        if (webSocketClient != null && webSocketClient.isOpen()) {            webSocketClient.send(message);        }    }    @Override    protected 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;    }    @Override    public void onOpen(ServerHandshake handshakeData) {        System.out.println("WebSocket 连接打开");        if (webSocketListener != null) {            webSocketListener.onOpen("WebSocket 连接打开");        }    }    @Override    public void onMessage(String message) {        if (webSocketListener != null) {            webSocketListener.onMessage(message);        }    }    @Override    public void onClose(int code, String reason, boolean remote) {        System.out.println("WebSocket 连接关闭");        if (webSocketListener != null) {            webSocketListener.onClose("WebSocket 连接关闭");        }    }    @Override    public void onError(Exception ex) {        System.out.println("WebSocket 出现错误: " + ex.getMessage());        if (webSocketListener != null) {            webSocketListener.onError("WebSocket 出现错误: " + ex.getMessage());        }    }}

index.php/tags-1.html" >服务端

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;    @Override    protected 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();    }    @Override    public void onClientOpen(WebSocket conn, String address) {        runOnUiThread(() -> {            // 更新UI显示连接的客户端的地址            // 例如:更新一个文本视图来显示已连接            tv_state.setText(address);        });    }    @Override    public void onClientClose(WebSocket conn, int code, String reason, boolean remote) {        runOnUiThread(() -> {            // 更新UI以表示客户端断开连接            // 例如:更新列表视图中的项目            tv_state.setText("客户端以断开");        });    }    @Override    public void onClientMessage(WebSocket conn, String message) {        runOnUiThread(() -> {            // 在UI上展示收到的消息            // 例如:将消息添加到聊天窗口            tv_state.setText(message);        });    }    @Override    public void onClientError(WebSocket conn, Exception ex) {        runOnUiThread(() -> {            // 在UI上展示错误信息            // 例如:展示一个错误弹窗        });    }    @Override    public void onServerStart() {        runOnUiThread(() -> {            // 更新UI表示服务器已经启动            // 例如:改变一个文本视图的文本            tv_state.setText("服务器已启动");        });    }    @Override    protected 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 {    // 事件监听器,用于将事件通知给ServiceActivity    private 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));    }    @Override    public void onOpen(WebSocket conn, ClientHandshake handshake) {        // 客户端连接打开时调用监听器的onClientOpen方法        String address = conn.getRemoteSocketAddress().getAddress().getHostAddress();        serviceWebSocketListener.onClientOpen(conn, address);    }    @Override    public void onClose(WebSocket conn, int code, String reason, boolean remote) {        // 客户端连接关闭时调用监听器的onClientClose方法        String address = conn.getRemoteSocketAddress().getAddress().getHostAddress();        serviceWebSocketListener.onClientClose(conn, code, reason, remote);    }    @Override    public void onMessage(WebSocket conn, String message) {        // 接收到客户端消息时调用监听器的onClientMessage方法        serviceWebSocketListener.onClientMessage(conn, message);    }    @Override    public void onError(WebSocket conn, Exception ex) {        // 连接发生错误时调用监听器的onClientError方法        serviceWebSocketListener.onClientError(conn, ex);    }    @Override    public 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

上一篇:怎么使用手机云服务器?

下一篇:群发服务器的文案怎么编辑?