java 网络编程-TCP-多人聊天(面向对象封装)
发布时间:2020-12-15 07:54:21 所属栏目:Java 来源:网络整理
导读:客户端: 多个客户可以正常收发信息,因为可以同时发送和接受信息,不是发送完信息后等待 返回信息,所以要加入多线程 public class Client {public static void main(String[]args) throws UnknownHostException,IOException{ System.out.println("客户端启
客户端:
多个客户可以正常收发信息,因为可以同时发送和接受信息,不是发送完信息后等待 返回信息,所以要加入多线程 public class Client { public static void main(String[]args) throws UnknownHostException,IOException { System.out.println("客户端启动中..."); Socket client =new Socket("localhost",9999); new Thread(new Send(client)).start(); new Thread(new Receive(client)).start(); } } 客户端的发送端封装了: public class Send implements Runnable{ private BufferedReader br; private DataOutputStream dos; private Socket client; private boolean flag=true; public Send(Socket client) { this.client=client; br=new BufferedReader(new InputStreamReader(System.in)); try { dos=new DataOutputStream(client.getOutputStream()); } catch (IOException e) { this.release(); } } public void run() { while(flag) { System.out.println("请输入消息:"); String msg=getstr(); send(msg); } } private void release() { this.flag=false; utils.close(dos,client); } //从控制台获取消息 private String getstr() { try { String msg=br.readLine(); return msg; } catch (IOException e) { e.printStackTrace(); } return null; } private void send(String msg) { try { dos.writeUTF(msg); dos.flush(); } catch (IOException e) { release(); } } } 客户端的接收端封装了: public class Receive implements Runnable { private DataInputStream dis; private Socket client; private boolean flag=true; public Receive(Socket client) { this.client=client; try { dis=new DataInputStream(client.getInputStream()); } catch (IOException e) { release(); } } private String receive() { String msg; try { msg = dis.readUTF(); return msg; } catch (IOException e) { release(); } return null; } public void run() { while(flag) { String msg=receive(); System.out.println(msg); } } private void release() { this.flag=false; utils.close(dis,client); } } 作为释放资源工具类 public class utils { public static void close(Closeable... target ) { for(Closeable it:target) { try { if(null!=it) { it.close(); } } catch (IOException e) { e.printStackTrace(); } } } } 在线聊天室 public class Chat { public static void main(String[]args) throws IOException { System.out.println("服务器启动中..."); ServerSocket server=new ServerSocket(9999); while(true) { Socket client =server.accept(); System.out.println("一个客户端建立了连接"); new Thread(new channel(client)).start(); } } static class channel implements Runnable{ private DataInputStream dis; private DataOutputStream dos; private BufferedReader br; private Socket client; private boolean flag; public channel(Socket client) { this.client=client; try { dis=new DataInputStream(client.getInputStream()); dos=new DataOutputStream(client.getOutputStream()); flag=true; } catch (IOException e) { release(); } } //接收消息 private String receive() { try { String msg=dis.readUTF(); return msg; } catch (IOException e) { release(); } return null; } //发送给消息 private void send(String msg) { try { dos.writeUTF(msg); dos.flush(); } catch (IOException e) { release(); } } private void release() { this.flag=false; utils.close(dis,dos,client); //写一个工具类,使用Closeable...可变参数 } public void run() { while(flag) { String msg=receive(); send(msg); } release(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |