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.  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,308评论 19 139
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    VD2012阅读 7,138评论 0 5
  • 《敌军双杀》 暂定三万字数 预计三月中旬完结 记录
    付鸩戈阅读 2,924评论 0 1
  • 下了车来,眼前一个完全陌生的地方。 边问路边走,心中记下几个关键标志,边走边验证。 这个周日的下午,太阳还未西斜,...
    晓天狼星阅读 1,430评论 4 3
  • 协作在我们生活中必不可少,我在书中了解到协作消费、协作治理、社会化生产等概念。我在日常生活中也常常需要协作。例如,...
    K张佳佳0阅读 1,703评论 0 0