Java中用网络通信实现聊天室私聊和群聊的功能三、启动流程四、效果展示
一、结构图
二、代码实现 ①类
package com.allen;import java.io.*;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/*** 要求实现谁和谁聊天的提示* @author Administrator**/public class Server {//群发//定义一个集合,用于存储所有客户端的输出流List allPw = new ArrayList<>();//用于根据用户名存储客户端输出流Map
②类
文章插图
package com.allen;import java.io.*;import java.net.Socket;import java.util.Scanner;public class Client {public static void main(String[] args) {//连接服务器try {System.out.println("连接服务端");Socket socket = new Socket("localhost",8088);System.out.println("连接服务端成功");Thread t1 = new Thread(new ClientWriteData(socket));Thread t2 = new Thread(new ClientReadData(socket));t1.start();t2.start();} catch (IOException e) {e.printStackTrace();}}}class ClientWriteData implements Runnable{private Scanner scan;private Socket socket;public ClientWriteData(Socket socket){this.socket = socket;}public void run(){try {OutputStream out = socket.getOutputStream();OutputStreamWriter osw;osw = new OutputStreamWriter(out,"GBK");PrintWriter pw = new PrintWriter(osw,true);System.out.println("请输入用户名:");scan = new Scanner(System.in);String str0 = scan.next();pw.println(str0);while(true){System.out.println("请选择私聊或者群发:1表示私聊\t2表示群发");int n = scan.nextInt();pw.println(n);switch(n){case 1:System.out.println("请输入私聊对象: ");String name = scan.next();pw.println(name);System.out.println("私聊的信息:");String str = scan.next();pw.println(str);break;case 2:System.out.println("请输入群发消息:");System.out.println(str0+"正在发消息:");String str1 = scan.next();pw.println(str1);break;default:System.out.println("退出消息发送:");System.exit(0);}}} catch (IOException e) {e.printStackTrace();}}}class ClientReadData implements Runnable{private Socket socket;public ClientReadData(Socket socket){this.socket = socket;}public void run(){try {InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is,"GBK");BufferedReader br = new BufferedReader(isr);String str = null;while((str = br.readLine())!=null){System.out.println(str);}} catch (IOException e) {System.err.println("服务端已断开!!!");e.printStackTrace();}}}
- 微信公众号接入AI ChatGPT机器人bot的详细教程
- 最新全球Top10制药企业版图!谁是肿瘤、自免赛道之王? 世界十大药企
- 人类十之最 中国之最的详细介绍
- 第一次坐飞机详细流程
- Apipost在V6.0.4版本中对“脱机 ;离线 ;未登录”的优化
- java对话框自动消失,当前位置许可对话框消失得太快
- 为何中国南海那么大,九段线几乎都顶到邻国海岸线的家门口了? 中国版图上的世界之最
- 瑞丽离西双版纳有多远
- 西双版纳旅游
- 全中国最“硬”的省份,山东省究竟“硬”在哪? 中国之最以及详细解释