Java编写多人聊天室
来源:互联网 发布:淘宝衣服拍照价格 编辑:程序博客网 时间:2024/06/05 15:52
1.客户端
package tk.javazhangwei.net.tcp.chat.Demo03;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;/*** * 创建客户端 发送数据+接收数据 * * @author zw * */public class Client {public static void main(String[] args) throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入一个喜欢的名称:");String name = bf.readLine();if(name.equals("")) {return;}Socket client = new Socket("localhost",1025);//控制台输入信息//控制台输入信息new Thread(new Send(client,name)).start();//一条路径new Thread(new Receive(client)).start();//一条路径}}
2.服务端(写了个内部类:负责接收与发送多进程)
package tk.javazhangwei.net.tcp.chat.Demo03;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class Server {List<myChannel> all = new ArrayList<myChannel>();public static void main(String[] args) throws IOException {new Server().start();}public void start() throws IOException {ServerSocket server = new ServerSocket(1025);while (true) {Socket socket = server.accept();myChannel mc = new myChannel(socket);Thread t = new Thread(mc);all.add(mc);t.start();}}/*** * 一个客户端 一个通路 * @author zw * */class myChannel implements Runnable{private DataInputStream dis;private DataOutputStream dos;private boolean isRuning=true;private String name;public myChannel(Socket socket) throws IOException{try {dis = new DataInputStream(socket.getInputStream());dos = new DataOutputStream(socket.getOutputStream());this.name = dis.readUTF();send("欢迎进入聊天室");senOthers(this.name + "进入了聊天室");} catch (IOException e) {// TODO Auto-generated catch block//e.printStackTrace();isRuning=false;dos.close();dis.close();}}/*** * 读取数据 * * @return * @throws IOException */private String receive() throws IOException {String msg ="";try {msg =dis.readUTF();} catch (IOException e) {// TODO Auto-generated catch block//e.printStackTrace();isRuning=false;dis.close();}return msg;}/*** * 发送数据 * @throws IOException */private void send(String msg) throws IOException {if(msg==null&& msg.equals("")) {return;}try {dos.writeUTF(msg);dos.flush();} catch (IOException e) {// TODO Auto-generated catch block//e.printStackTrace();isRuning=false;dos.close();all.remove(this);}}/*** * 发送给其他客户端 * @throws IOException */private void senOthers(String msg) throws IOException {if (msg.startsWith("@")&&msg.indexOf(":")>-1) {// 表示为私聊//获取nameString name = msg.substring(1, msg.indexOf(":"));String content = msg.substring(msg.indexOf(":")+1);//获取冒号后的正文for (myChannel others : all) {if(others.name.equals(name)) {others.send(this.name+"对您瞧瞧的说:"+content);}}} else {//遍历容器for(myChannel others:all) {if(others == this) {//如果是本身,就跳过continue;}others.send(this.name+"对所有人说:"+msg);}}}@Overridepublic void run() {while(isRuning) {try {senOthers(receive()) ;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
3.客户端的发送与接收多进程
package tk.javazhangwei.net.tcp.chat.Demo03;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;/*** * 发送数据 * * @author zw * */public class Send implements Runnable{//控制台输入流private BufferedReader console;//管道输出流private DataOutputStream dos;private String name;private boolean isRuning =true;//线程是否运行public Send() {console =new BufferedReader(new InputStreamReader(System.in));}public Send(Socket client,String name) throws IOException {this();try {dos = new DataOutputStream(client.getOutputStream());this.name = name;send(name);} catch (IOException e) {// TODO Auto-generated catch block//e.printStackTrace(); isRuning =false; dos.close(); console.close();}}private String getMsgFromConsole() {try {return console.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "";}@Overridepublic void run() {while(isRuning) {try {send(getMsgFromConsole());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void send(String msg) throws IOException {if (msg!=null && !msg.equals("")) {try {dos.writeUTF(msg);dos.flush();// 强制刷新} catch (IOException e) {// TODO Auto-generated catch block// e.printStackTrace();isRuning = false;dos.close();console.close();}}}}
package tk.javazhangwei.net.tcp.chat.Demo03;import java.io.DataInputStream;import java.io.IOException;import java.net.Socket;/*** * 接收数据 * @author zw * */public class Receive implements Runnable{//客户端的输入流private DataInputStream dis;private boolean isRuning = true;public Receive() {} public Receive(Socket client) {super();try {dis = new DataInputStream(client.getInputStream());} catch (IOException e) {// TODO Auto-generated catch block//e.printStackTrace();isRuning =false;try {dis.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}/*** * 接收数据 * @return * @throws IOException */public String receive() throws IOException {String msg = "";try {msg =dis.readUTF();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();isRuning =false;dis.close();}return msg;}@Overridepublic void run() {while(isRuning) {try {System.out.println(receive());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
4.效果
阅读全文
0 0
- Java编写多人聊天室
- Java编写简单的聊天室
- java实现多人聊天室
- 用Node.js编写多人实时在线聊天室
- 关于JAVA聊天室编写的总结
- 编写聊天室
- Java实战_局域网多人聊天室
- Java NIO示例:多人网络聊天室
- Java NIO示例:多人网络聊天室
- Java NIO示例:多人网络聊天室
- Java版 多人聊天室Demo
- 如何实现java,jsp,ajax编写的在线聊天室啊?
- JAVA 基于TCP协议编写的Socket聊天室程序
- 用Java编写的UDP协议简单聊天室
- java编写的基于TCP协议的聊天室
- 基于servlet+jdbc编写的java版多人聊天室WEB版
- 编写一个控制台版本的局域网聊天室实现多人聊天
- Python编写基于socket的非阻塞多人聊天室程序(单线程&多线程)
- csdn博客利用github打造自己的专属域名
- leetcode--Two Sum II
- hdu2639 Rikka with Competition
- spring boot + fastjson
- LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Java编写多人聊天室
- org.apache.log4j.helpers.Loader加载资源文件
- 中国剩余定理算法详解(余数互质和不互质)
- IntelliJ IDEA 14 注册码
- 包命名规范只Util,Tool,Service
- Android 四大组件之Service
- Intellij Idea创建控制台及MAVEN控制台
- linux磁盘管理
- Ecology8二次开发:HTML表单浏览按钮只读与设置值