Java Socket实战之二 多线程通信

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

本文地址:http://blog.csdn.net/kongxx/article/details/7259465

Java Socket实战之一 单线程通信

上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。具体代码如下:

package com.googlecode.garbagecan.test.socket.sample2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class MyServer public static void main(String[] args) throws IOException {  ServerSocket server = new ServerSocket(10000);    while (true) {   Socket socket = server.accept();   invoke(socket);  } }  private static void invoke(final Socket client) throws IOException {  new Thread(new Runnable() {   public void run() {    BufferedReader in = null;    PrintWriter out = null;    try {     in = new BufferedReader(new InputStreamReader(client.getInputStream()));     out = new PrintWriter(client.getOutputStream());     while (true) {      String msg = in.readLine();      System.out.println(msg);      out.println("Server received " + msg);      out.flush();      if (msg.equals("bye")) {       break;      }     }    } catch(IOException ex) {     ex.printStackTrace();    } finally {     try {      in.close();     } catch (Exception e) {}     try {      out.close();     } catch (Exception e) {}     try {      client.close();     } catch (Exception e) {}    }   }  }).start(); }}
下面是Client程序代码:
package com.googlecode.garbagecan.test.socket.sample2;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class MyClient public static void main(String[] args) throws Exception {  Socket socket = new Socket("localhost", 10000);  BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  PrintWriter out = new PrintWriter(socket.getOutputStream());  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  while (true) {   String msg = reader.readLine();   out.println(msg);   out.flush();   if (msg.equals("bye")) {    break;   }   System.out.println(in.readLine());  }  socket.close(); }}
测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。






           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/mm2zzyzzp/article/details/83931155