Socket多线程通信实例

当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。具体代码如下:

1.  package com.googlecode.garbagecan.test.socket.sample2;  

3.  import java.io.BufferedReader;  
4.  import java.io.IOException;  
5.  import java.io.InputStreamReader;  
6.  import java.io.PrintWriter;  
7.  import java.net.ServerSocket;  
8.  import java.net.Socket;  

10.  public class MyServer {  
11.  public static void main(String[] args) throws IOException {  
12.  ServerSocket server = new ServerSocket(10000);  

14.  while (true) {  
15.  Socket socket = server.accept();  
16.  invoke(socket);  
17.  }  
18.  }  

20.  private static void invoke(final Socket client) throws IOException {  
21.  new Thread(new Runnable() {  
22.  public void run() {  
23.  BufferedReader in = null;  
24.  PrintWriter out = null;  
25.  try {  
26.  in = new BufferedReader(new InputStreamReader(client.getInputStream()));  
27.  out = new PrintWriter(client.getOutputStream());  

29.  while (true) {  
30.  String msg = in.readLine();  
31.  System.out.println(msg);  
32.  out.println("Server received " + msg);  
33.  out.flush();  
34.  if (msg.equals("bye")) {  
35.  break;  
36.  }  
37.  }  
38.  } catch(IOException ex) {  
39.  ex.printStackTrace();  
40.  } finally {  
41.  try {  
42.  in.close();  
43.  } catch (Exception e) {}  
44.  try {  
45.  out.close();  
46.  } catch (Exception e) {}  
47.  try {  
48.  client.close();  
49.  } catch (Exception e) {}  
50.  }  
51.  }  
52.  }).start();  
53.  }  
54.  }  

下面是Client程序代码:

1.  package com.googlecode.garbagecan.test.socket.sample2;  

3.  import java.io.BufferedReader;  
4.  import java.io.InputStreamReader;  
5.  import java.io.PrintWriter;  
6.  import java.net.Socket;  

8.  public class MyClient {  
9.  public static void main(String[] args) throws Exception {  
10.  Socket socket = new Socket("localhost", 10000);  
11.  BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
12.  PrintWriter out = new PrintWriter(socket.getOutputStream());  
13.  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  

15.  while (true) {  
16.  String msg = reader.readLine();  
17.  out.println(msg);  
18.  out.flush();  
19.  if (msg.equals("bye")) {  
20.  break;  
21.  }  
22.  System.out.println(in.readLine());  
23.  }  
24.  socket.close();  
25.  }  
26.  }

你可能感兴趣的:(Socket多线程通信实例)