java网络编程(二)多线程网络编程

来源:互联网 发布:建筑网络 编辑:程序博客网 时间:2024/04/28 05:25
通过上面第一章的程序可以看出来,针对服务端只能连接一个客户端,如果有另外一台机器连接主机就会出现错误,连接不上,主要是因为第一章的代码是单线程的,也就是是单对单的服务,服务端server接收到一个client请求后,后面的client请求就无法连接上主机了
下面是多线程的网络通信服务端代码:
package com.sun.net;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 ManyThreadSocketServer {     private int port = 10000;          private ServerSocket server;          public ManyThreadSocketServer() throws IOException{            server = new ServerSocket( port);     }          public void talk() throws IOException{            while( true){                Socket socket = server.accept();                invoke(socket);           }     }     public void invoke(final Socket socket){            new Thread( new Runnable() {                 @Override                 public void run() {                      try {                           BufferedReader br = getReader(socket);                           PrintWriter pw = getWriter(socket);                                                      String msg = null;                            while( true){                                msg = br.readLine();                                System. err.println(msg);                                                                pw.println( "server:" + msg);                                pw.flush();                                                                 if(msg.equals( "bye")){                                      break;                                }                           }//                         socket.close();//                         if( br != null){//                              br.close();//                         }//                         if( pw != null){//                              pw.close();//                         }                     } catch (Exception e) {                           e.printStackTrace();                     }                }            }).start();     }     public BufferedReader getReader(Socket socket) throws Exception{            return new BufferedReader( new InputStreamReader(socket.getInputStream()));     }     public PrintWriter getWriter(Socket socket) throws Exception{            return new PrintWriter(socket.getOutputStream());     }     public static void main(String[] args) throws Exception {            new ManyThreadSocketServer().talk();     }}
客户端代:通过获取系统输入向服务端发送数据信息
package com.sun.net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ManyThreadSocketClient {
     private String serverIp;
     private int port;
     
     private Socket socket ;
     
     public ManyThreadSocketClient() {
            serverIp = "192.168.1.103";
            port = 10000;
     }
     
     public BufferedReader getReader( Socket socket) throws Exception{
            return new BufferedReader( new InputStreamReader(System.in));
     }
     public PrintWriter getWriter( Socket socket)  throws Exception{
            return new PrintWriter(socket.getOutputStream());
     }
     
     public void speak(){
            try {
                 socket = new Socket(serverIp,port);
                BufferedReader br = getReader( socket);
                PrintWriter pw = getWriter( socket);
                
                String msg = null;
                 while( true){
                     msg = br.readLine();
                     
                     pw.println(msg);
                     pw.flush();
                     
                      if(msg.equals( "bye")){
                            break;
                     }
                }
                 socket.close();
                 if(br != null){
                     br.close();
                }
                 if(pw != null){
                     pw.close();
                }
           } catch (Exception e) {
                e.printStackTrace();
           }
     }
     public static void main(String[] args) {
            new ManyThreadSocketClient().speak();
     }
}


0 0
原创粉丝点击