运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档