java Socket(2)
java Socket(二)
上次做了一个java socket一对一通信的例子这次来写一个一对多的通信,这里我们使用java的多线程来实现
首先来看一下服务类
- /**
- *
- */
- package com.dnion.socket;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- ***************************************************************
- * 项目名称:JavaThread
- * 程序名称:MultiJabberServer
- * 日期:2012-8-23 下午02:38:20
- * 作者:
- * 模块:
- * 描述:
- * 备注:
- * ------------------------------------------------------------
- * 修改历史
- * 序号 日期 修改人 修改原因
- *
- * 修改备注:
- * @version
- ***************************************************************
- */
- public class MultiJabberServer {
- /**
- * 方法名:main
- * 描述:
- * 作者:
- * 日期:2012-8-23 下午02:38:20
- * @param @param args
- * @return void
- */
- public static void main(String[] args) {
- ServerSocket s = null;
- Socket socket = null;
- try {
- s = new ServerSocket(8080);
- //等待新请求、否则一直阻塞
- while(true){
- socket = s.accept();
- System.out.println("socket:"+socket);
- new ServeOneJabbr(socket);
- }
- } catch (Exception e) {
- try {
- socket.close();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }finally{
- try {
- s.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
接着我们要写一个服务端响应请求的类也就是一个socket
- /**
- *
- */
- package com.dnion.socket;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.Socket;
- /**
- ***************************************************************
- * 项目名称:JavaThread
- * 程序名称:ServeOneJabbr
- * 日期:2012-8-23 下午02:34:13
- * 作者:
- * 模块:
- * 描述:
- * 备注:
- * ------------------------------------------------------------
- * 修改历史
- * 序号 日期 修改人 修改原因
- *
- * 修改备注:
- * @version
- ***************************************************************
- */
- public class ServeOneJabbr extends Thread{
- private Socket socket = null;
- private BufferedReader br = null;
- private PrintWriter pw = null;
- public ServeOneJabbr(Socket s){
- socket = s;
- try {
- br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
- start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void run() {
- while(true){
- String str;
- try {
- str = br.readLine();
- if(str.equals("END")){
- br.close();
- pw.close();
- socket.close();
- break;
- }
- System.out.println("Client Socket Message:"+str);
- pw.println("Message Received");
- pw.flush();
- } catch (Exception e) {
- try {
- br.close();
- pw.close();
- socket.close();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }
- }
- }
- }
接下来利用我们上一次的客户端socket
这样一个简单地多客户端响应socket就成了
每次有一个请求发送过来服务端都会新建一个线程来单独服务。