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();}}}}

更多相关文章

  1. 多线程例子 android camera capture
  2. 垂直滚动公告栏
  3. Android学习笔记(7)————Android中的消息机制
  4. android 子线程handler 实现
  5. android 子线程handler 实现
  6. android监听edittext输入事件
  7. android 网络状态监听
  8. Android监听摇一摇
  9. Android(安卓)Recyclerview 滚动事件监听

随机推荐

  1. vue常用术语、样式与事件绑定和列表渲染
  2. 1. 购物车vue改写 2. 仿 php中文网 app
  3. Android(安卓)图片透明度处理代码
  4. Android开屏视频广告
  5. Android启动画面Splash
  6. Android: 判断网络状态
  7. Android中执行adb命令
  8. Android中退出程序的提示框
  9. Android(安卓)获取音频时长
  10. Android(安卓)ToastUtil