运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
最近在项目中可能要用到socket相关的东西来发送消息,所以初步研究了下socket 的TCP和UDP实现方式,并且结合java1.5的concurrent.ExecutorService类来实现多线程。
具体实现方式见代码:
一、TCP方式:
1、服务端实现方式:
TCP的服务端实现方式主要用到ServerSocket类,接收等待客户端连接的方法是accept();
代码如下:类SocketServerTCP
1private int port=8823;
2private ServerSocket serverSocket;
3private ExecutorService executorService;//线程池
4private final int POOL_SIZE=100;//单个CPU线程池大小
5
6public SocketServerTCP(){
7try{
8serverSocket=new ServerSocket(port);
9executorService=
Executors.newFixedThreadPool(Runtime.getRuntime()
10.availableProcessors()*POOL_SIZE);
("端口号为"+port+"的服务器启动");
12}catch(IOException e){
13 e.printStackTrace();
14}
15}
16
17public void service(){
18System.out.println("socket初始化成功!");
("socket服务端初始化成功!");
20while(true){
21Socket socket=null;
22try{
23//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
24socket=serverSocket.accept();
25executorService.execute(new CallService(socket)); 26}catch(Exception e){
27 e.printStackTrace();
28}
29}
30}
CallService类主要作用是接收到消息后,来实现具体业务。
代码如下:
1/**
2*功能说明:执行具体业务的线程
3*/
4class CallService implements Runnable{
5Logger logger=Logger.getLogger(CallService.class);
6private Socket socket;
7
8private BufferedReader is;
9private PrintWriter os;
10
11public CallService(Socket socket){
12this.socket=socket;
13}
14
15public void run(){
16try{
17is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
18os=new PrintWriter(socket.getOutputStream());
19
20String msg=is.readLine();
21
22System.out.println("接到客户端消息"+msg);
23
24//返回消息给客户端
25String responseMsg="服务端返回消息:"+msg;
26os.println(responseMsg);
27os.flush();
28}catch(IOException e){
29 e.printStackTrace();
30}finally{
31try{
32if(os!=null){
33os.close();
34}
35if(is!=null){
36is.close();
37}
38if(socket!=null){
39socket.close();
40}
41}catch(IOException e){
42 e.printStackTrace();
43}
44}
45}
服务器启动方式:
1public static void main(String[]args){
2new SocketServerTCP().service();
3}
2、TCP客户端实现代码
客户通过new Socket(ip,port)创建一个socket,并通过PrintWriter来向服务器发送消息
1public class SocketClientTCP{
2public String sendMsg(String ip,int port,String msg){
3Socket client=null;
4try{
5//创建Socket
6client=new Socket(ip,port);
7
8//向服务器发送消息
9PrintWriter out=new PrintWriter(new BufferedWriter(
10new OutputStreamWriter(client.getOutputStream())),true);