定义父类:ParentUi

package com.huizhi;import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;public class ParentUi extends JFrame{protected JPanel jPanel;protected JTextArea jTextArea;protected JTextField jTextField;protected JButton jButton;protected static PrintWriter pw = null;protected static BufferedReader br = null;protected String stra;protected ServerSocket ss;protected Socket s;/*protected boolean bl=false;*/public void setUi(String a){jPanel = new JPanel();    //创建面板jTextField = new JTextField();jTextField.setColumns(20);jTextArea = new JTextArea();jTextArea.setColumns(40);jTextArea.setRows(40);jButton = new JButton("发送聊天内容");    //创建按钮//设置LayoutjPanel.add(jTextArea);jPanel.add(jTextField);jPanel.add(jButton);     //面板中添加按钮/*** 向JPanel添加FlowLayout布局管理器,* 将组件间的横向和纵向间隙都设置为20像素*/this.add(jPanel);  //添加面板到容器this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setBounds(300,50, 800,730);//设置画布大小,this可以省略this.setTitle(a);//根据客户端与服务器端调整标题setVisible(true);}public void parentChat(int i){try {final String aa;final String bb;if(i==0){s = new Socket(InetAddress.getLocalHost(), 5500);aa="客户端说:";bb="服务器说: ";}else{aa="服务器说:";bb="客户端说:";ss=new ServerSocket(5500);jTextArea.append("服务器正常启动。。。。"+"\r\n");s=ss.accept();//阻塞方法jTextArea.append("连接成功"+s.getRemoteSocketAddress()+"\r\n");}//Socket s = new Socket("192.168.43.11",5500);pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));br = new BufferedReader(new InputStreamReader(s.getInputStream()));// 添加鼠标监听事件,当鼠标点击时触发jButton.addMouseListener(new MouseAdapter() {//定义鼠标点击事件响应过程@Overridepublic void mouseClicked(MouseEvent e) {stra = jTextField.getText();//JTextArea使用append方法后,在后面添加\r\n即可自动换行jTextArea.append(aa+stra+"\r\n");pw.println(stra);pw.flush();jTextField.setText("");}});while (true) {String strb=br.readLine();//JTextArea使用append方法后,在后面添加\r\n即可自动换行jTextArea.append(bb+strb+"\r\n");}}catch (Exception e) {e.printStackTrace();}finally {try {br.close();pw.close();} catch (IOException e1) {e1.printStackTrace();}}}
}

服务器端类:Server

package com.huizhi;/*import java.net.ServerSocket;
import java.net.Socket;*/public class Server extends ParentUi{/*** @param args*/public static void main(String[] args) {ServerUi serverUi=new ServerUi();serverUi.chat();}
}class ServerUi extends ParentUi {/* private static ServerSocket ss;private static Socket s;*/public void chat() {setUi("服务器端程序");parentChat(1);}
}

客户端类:Client

/*** 服务器链接测试*/
package com.huizhi;public class Client {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubClientUi clientUi=new ClientUi();clientUi.chat();}
}class ClientUi extends ParentUi {public void chat() {setUi("客户端程序");parentChat(0);}
}

启动运行,先运行服务器,再运行客户端。

项目的目录结构如下 :

【汇智学堂】基于Socket+面向对象实现的网络聊天相关推荐

  1. 基于Socket通信的在线网络聊天室

    文章目录 项目结构 client constans entity util IO server ui other 大致思路 演示 时间:2021/4/20 开发环境: jdk1.8 编译器:idea2 ...

  2. python实现简易聊天需要登录博客园zip下载_Python基于Socket实现简易多人聊天室的示例代码...

    前言 套接字(Sockets)是双向通信信道的端点. 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器. 套接字可以通过多种不同的 ...

  3. 基于UDP协议的局域网网络聊天工具

    /* * 本程序实现了基于UDP协议的局域网网络聊天工具. * 参考网上的源码,发现一个calss就可以搞定. * ChatFrame类创建窗口,包含JTextField和TextArea. * 前者 ...

  4. 【汇智学堂】-python系列小游戏开发准备工作

    第一章:准备工作 游戏开发是程序开发的一种.程序就是指令,让计算机明白要做什么的指令.编写指令,让计算机能够显示游戏界面,角色,与我们参与者交互,就是我们要学习的内容.编写游戏有很多种语言工具,pyt ...

  5. 【汇智学堂】-python小游戏(弹球游戏之六-类的使用中体会坐标位置)

    3.6类的使用中体会坐标位置 现在我们应用类来将函数封装起来.当程序运行时,我们体会一下坐标位置.下面是我们要做的事情: 1.建两个类,一个类用来存球板相关的函数与变量,另一个类用来存球相关的函数与变 ...

  6. 【汇智学堂】docker网络管理之二

    1.创建自定义网络 在Docker主机上可以使用docker network create指令来创建网络. 其中 --driver bridge可省略 查看是否成功 查看新建网络的详情 dock ...

  7. 【汇智学堂】docker网络管理之一

    非集群网络模式 bridge(单主机互联) overlay(可跨主机互联) docker network ls bridge网络管理 创建并启动容器. docker run -itd --nam ...

  8. 【汇智学堂】-div+css布局十二(商品列表图文展示)

    效果图: html文件: <!DOCTYPE html> <html><head><meta charset="UTF-8">< ...

  9. 【汇智学堂】-python小游戏(生成.exe文件)

    第六章:生成.exe程序 我们应用pyinstaller,将我们的程序生成.exe程序.使它在没有Python的环境下,可以运行. 6.1 Pyinstaller的安装 Pyinstaller的官网下 ...

最新文章

  1. 管道:介绍和基本服务
  2. Cornell University Designing with Microcontrollers
  3. linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...
  4. 录入键盘字母输入并将小写变为大写
  5. 如何解决普通用户使用sudo找不到命令
  6. 各种神经网络优化算法:从梯度下降到Adam方法
  7. 【HIBERNATE框架开发之九】HIBERNATE 性能优化笔记!(遍历、一级/二级/查询/缓存、乐观悲观锁等优化算法)...
  8. 聊聊我对开发项目选技术的看法
  9. office 2010中自带的 微软拼音输入法2010卸载
  10. JS中同名函数有效执行顺序
  11. 每日记载内容总结39
  12. python中如何调用类_python中如何调用类的方法
  13. 基于 python 的银行信贷风险评估
  14. Windows无法安装到GPT格式磁盘的根本解决办法 - 初学者系列 - 学习者系列文章...
  15. 这家200多年历史的中华老字号,是如何赢得今年快手中秋月饼品牌冠军的?
  16. 如何提高逻辑思维能力
  17. 1602 c语言驱动程序,[共享]发一个LCD1602驱动程序(四位数据线)
  18. ad18更改原理图纸张大小
  19. 课程设计:飞机航班信息查询系统
  20. python之禅中文-python之禅怎么打出来

热门文章

  1. 微信小程序登录 返回 -41003
  2. Tableau筛选器:仪表板中运用地图做筛选器
  3. 九度_题目1361:翻转单词顺序
  4. sql server 取当天所在第几周
  5. 代码执行器 hook console.log 方案
  6. 服务器性能监控之New Relic 入门教程
  7. html table快捷键,超级实用且神奇的表格快捷键
  8. maya arnold渲染器产品快速灯光渲染模板文件下载
  9. Java岗大厂面试百日冲刺【Day46】— Linux2 (日积月累,每日三题)
  10. 【C语言程序设计】基本算术运算