Android Tcp服务器端

举报
福州司马懿 发表于 2021/11/19 05:16:12 2021/11/19
【摘要】 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 jav...

      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<Socket> 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();
      			}
      		}
     		@Override
     		public 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<Socket>();
      		executorService = Executors.newFixedThreadPool(GlobalValue.TCP_MAX_CONNECT_COUNT);
     		// 监听线程
      		executorService.execute(new Runnable() {
     			@Override
     			public 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();
      			}
      		}
      	}
      }
  
 

文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/51560178

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。