温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java 网络编程-TCP-多人聊天(面向对象封装)

发布时间:2020-07-07 13:35:30 来源:网络 阅读:556 作者:wx5d21d5e6e5ab1 栏目:编程语言

客户端:
多个客户可以正常收发信息,因为可以同时发送和接受信息,不是发送完信息后等待
返回信息,所以要加入多线程

 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(); } }

客户端的发送端封装了:
发送消息
从键盘读取消息
run()
释放资源

 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(); } } }

客户端的接收端封装了:
接收消息
run()
释放资源

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(); } } }
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI