Android(安卓)Tcp服务器端
16lz
2021-12-04
package com.chy.socket;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import com.chy.global.GlobalValue;public class TcpServer {private ServerSocket serverSocket = null;private List clientList = null;private OnReceiveListener onReceiveListener = null;private ExecutorService executorService = null;public interface OnReceiveListener {public void onReceive(Socket socket, OutputStream os, byte[] buffer, int len);}class ReadRunnable implements Runnable {private Socket socket = null;private InputStream is = null;private OutputStream os = null;public ReadRunnable(Socket socket) {this.socket = socket;try {is = socket.getInputStream();os = socket.getOutputStream();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {int len = 0;byte[] buffer = new byte[GlobalValue.READ_BLOCK_SIZE];while (true) {try {len = is.read(buffer, 0, GlobalValue.READ_BLOCK_SIZE);if (len > 0) {if (onReceiveListener != null) {onReceiveListener.onReceive(socket, os, buffer, len);}}} catch (IOException ex) {ex.printStackTrace();break;}}clientList.remove(socket);closeClient(socket);}}public TcpServer(int port, OnReceiveListener onReceivedListener) {try {serverSocket = new ServerSocket(port);} catch (IOException ex) {ex.printStackTrace();}if (serverSocket == null) {return;}this.onReceiveListener = onReceivedListener;clientList = new ArrayList();executorService = Executors.newFixedThreadPool(GlobalValue.TCP_MAX_CONNECT_COUNT);// 监听线程executorService.execute(new Runnable() {@Overridepublic void run() {Socket socket = null;while (true) {try {socket = serverSocket.accept();clientList.add(socket);executorService.execute(new ReadRunnable(socket));} catch (IOException ex) {ex.printStackTrace();break;}}closeClient(socket);}});}public synchronized boolean send(Socket socket, OutputStream os, byte[] buffer) {boolean result = false;if (os != null) {try {os.write(buffer);os.flush();result = true;} catch (IOException ex) {ex.printStackTrace();}}return result;}public void closeClient(Socket socket) {if (socket == null) {return;}try {InputStream is = socket.getInputStream();if (is != null) {is.close();}OutputStream os = socket.getOutputStream();if (os != null) {os.close();}socket.close();} catch (IOException ex) {ex.printStackTrace();}}public void close() {if (clientList != null) {for (Socket socket : clientList) {closeClient(socket);}}if (serverSocket != null) {try {serverSocket.close();} catch (IOException ex) {ex.printStackTrace();}}}}
更多相关文章
- 多线程例子 android camera capture
- 垂直滚动公告栏
- Android学习笔记(7)————Android中的消息机制
- android 子线程handler 实现
- android 子线程handler 实现
- android监听edittext输入事件
- android 网络状态监听
- Android监听摇一摇
- Android(安卓)Recyclerview 滚动事件监听