java Socket 多个客户端连接同一个服务端

时间:2021-04-29 22:15:50
package cn.com.socket;



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;

/*

服务器

*/

public class ThreadServer {


public static void main(String[] args) throws IOException {
//为了简单起见,所有的异常信息都往外抛  
    int port = 8899;  
     //定义一个ServerSocket监听在端口8899上  
    ServerSocket server = new ServerSocket(port);  
     while (true) {  
        //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的  
        Socket socket = server.accept();  
        //每接收到一个Socket就建立一个新的线程来处理它  
        new Thread(new Task(socket)).start();  
     }  
  }  
    
  /** 
   * 用来处理Socket请求的 
  */  
  static class Task implements Runnable {  
  
     private Socket socket;  
       
     public Task(Socket socket) {  
        this.socket = socket;  
     }  
       
     public void run() {  
        try {  
           handleSocket();  
        } catch (Exception e) {  
           e.printStackTrace();  
        }  
     }  
       
     /** 
      * 跟客户端Socket进行通信 
     * @throws Exception 
      */  
     private void handleSocket() throws Exception {  
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
        StringBuilder sb = new StringBuilder();  
        String temp;  
        int index;  
        while ((temp=br.readLine()) != null) {  
           System.out.println(temp);  
           if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收  
            sb.append(temp.substring(0, index));  
               break;  
           }  
           sb.append(temp);  
        }  
        System.out.println("我是服务器,客户端说: " + sb);  
        //读完后写一句  
      Writer writer = new OutputStreamWriter(socket.getOutputStream());  
        writer.write("我是服务器,客户端你好");  
        writer.write("eof\n");  
        writer.flush();  
        writer.close();  
        br.close();  
        socket.close();  
     }  
  }  

}  


package cn.com.socket;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;

/*

客户端1:

*/
public class ThreadClient {


public static void main(String[] args) throws IOException {
 //为了简单起见,所有的异常都直接往外抛  
    String host = "localHost";  //要连接的服务端IP地址  
    int port = 8899;   //要连接的服务端对应的监听端口  
    //与服务端建立连接  
    Socket client = new Socket(host, port);  
     //建立连接后就可以往服务端写数据了  
    Writer writer = new OutputStreamWriter(client.getOutputStream());  
     writer.write("我是客户端,服务器你好");  
     writer.write("eof\n");  
     writer.flush();  
     //写完以后进行读操作  
    BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));  
     StringBuffer sb = new StringBuffer();  
     String temp;  
     int index;  
     while ((temp=br.readLine()) != null) {  
        if ((index = temp.indexOf("eof")) != -1) {  
           sb.append(temp.substring(0, index));  
           break;  
        }  
        sb.append(temp);  
     }  
     System.out.println("我是客户端,服务器说: " + sb);  
     writer.close();  
     br.close();  
     client.close();  
}


}


package cn.com.socket;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;

/*

客户端二:

*/
public class ThreadClient2 {


public static void main(String[] args) throws UnknownHostException, IOException {
//为了简单起见,所有的异常都直接往外抛  
    String host = "localHost";  //要连接的服务端IP地址  
    int port = 8899;   //要连接的服务端对应的监听端口  
    //与服务端建立连接  
    Socket client = new Socket(host, port);  
     //建立连接后就可以往服务端写数据了  
    Writer writer = new OutputStreamWriter(client.getOutputStream());  
     writer.write("我是客户端,服务器你好呀!");  
     writer.write("eof\n");  
     writer.flush();  
     //写完以后进行读操作  
    BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));  
     StringBuffer sb = new StringBuffer();  
     String temp;  
     int index;  
     while ((temp=br.readLine()) != null) {  
        if ((index = temp.indexOf("eof")) != -1) {  
           sb.append(temp.substring(0, index));  
           break;  
        }  
        sb.append(temp);  
     }  
     System.out.println("我是客户端,服务器说: " + sb);  
     writer.close();  
     br.close();  
     client.close();  
}


}