首页 > 开发 > Java > 正文

Java--Socket通信(客户端服务端双向)

2024-07-13 10:03:18
字体:
来源:转载
供稿:网友

新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端

两个工程的读写操作线程类基本上完全相同

服务端:

import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;  public class Server {    public static final int PORT = 8000;//监听的端口号      public static void main(String[] args) {      Server server = new Server();      server.init();    }     public void init() {      ServerSocket serverSocket = null;     try {        serverSocket = new ServerSocket(PORT);        while (true) {          Socket client = serverSocket.accept();          //一个客户端连接就开户两个线程处理读写          new Thread(new ReadHandlerThread(client)).start();          new Thread(new WriteHandlerThread(client)).start();        }      } catch (Exception e) {        e.printStackTrace();      } finally{       try {         if(serverSocket != null){           serverSocket.close();         }       } catch (IOException e) {         e.printStackTrace();       }     }   }  }   /*  *处理读操作的线程   */ class ReadHandlerThread implements Runnable{   private Socket client;    public ReadHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataInputStream dis = null;     try{       while(true){         //读取客户端数据          dis = new DataInputStream(client.getInputStream());         String reciver = dis.readUTF();         System.out.println("客户端发过来的内容:" + reciver);        }     }catch(Exception e){       e.printStackTrace();     }finally{       try {         if(dis != null){           dis.close();         }         if(client != null){           client = null;         }       } catch (IOException e) {         e.printStackTrace();       }     }   } }  /*  * 处理写操作的线程  */ class WriteHandlerThread implements Runnable{   private Socket client;    public WriteHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataOutputStream dos = null;     BufferedReader br = null;     try{       while(true){         //向客户端回复信息          dos = new DataOutputStream(client.getOutputStream());          System.out.print("请输入:/t");          // 键盘录入          br = new BufferedReader(new InputStreamReader(System.in));         String send = br.readLine();          //发送数据         dos.writeUTF(send);        }     }catch(Exception e){       e.printStackTrace();     }finally{       try {         if(dos != null){           dos.close();         }         if(br != null){           br.close();         }         if(client != null){           client = null;         }       } catch (IOException e) {         e.printStackTrace();       }     }   } } 

客户端:

import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket;  public class Client {    public static final String IP = "localhost";//服务器地址    public static final int PORT = 8000;//服务器端口号     public static void main(String[] args) {      handler();    }    private static void handler(){     try {       //实例化一个Socket,并指定服务器地址和端口       Socket client = new Socket(IP, PORT);       //开启两个线程,一个负责读,一个负责写       new Thread(new ReadHandlerThread(client)).start();       new Thread(new WriteHandlerThread(client)).start();     } catch (Exception e) {       e.printStackTrace();     }   } }   /*  *处理读操作的线程   */ class ReadHandlerThread implements Runnable{   private Socket client;    public ReadHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataInputStream dis = null;     try {       while(true){         //读取服务器端数据          dis = new DataInputStream(client.getInputStream());         String receive = dis.readUTF();           System.out.println("服务器端返回过来的是: " + receive);        }     } catch (IOException e) {       e.printStackTrace();     } finally{       try {         if(dis != null){           dis.close();         }         if(client != null){           client = null;         }       } catch (IOException e) {         e.printStackTrace();       }     }   } }  /*  * 处理写操作的线程  */ class WriteHandlerThread implements Runnable{   private Socket client;    public WriteHandlerThread(Socket client) {     this.client = client;   }    @Override   public void run() {     DataOutputStream dos = null;     BufferedReader br = null;     try {       while(true){         //取得输出流         dos = new DataOutputStream(client.getOutputStream());         System.out.print("请输入: /t");          //键盘录入         br = new BufferedReader(new InputStreamReader(System.in));         String send = br.readLine();          //发送数据         dos.writeUTF(send);        }     } catch (IOException e) {       e.printStackTrace();     } finally{       try{         if(dos != null){           dos.close();         }         if(br != null){           br.close();         }         if(client != null){           client = null;         }       }catch(Exception e){         e.printStackTrace();       }     }   } } 

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表