chat聊天程序

服务端:

package cs;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;/*** @author zzs* @date 2021/9/22 20:49*/
public class Server extends JFrame implements ActionListener, KeyListener {//文本域private JTextArea jta;//滚动条private JScrollPane jsp;//面板private JPanel jp;//文本框private JTextField jtf;//按钮private JButton jb;//输出流private BufferedWriter bw = null;//服务端的端口号private static int serverPort;static {Properties properties = new Properties();try {properties.load(new FileReader("chat.properties"));//赋值serverPort = Integer.parseInt(properties.getProperty("serverPort"));} catch (IOException e) {e.printStackTrace();}}public Server() {//初始化组件jta = new JTextArea();//文本域默认不可编辑jta.setEnabled(false);//将文本域添加到滚动条中实现滚动jsp = new JScrollPane(jta);jp = new JPanel();jtf = new JTextField(20);jb = new JButton("发送");//将文本框和按钮添加到面板中jp.add(jtf);jp.add(jb);//将滚动条和面板添加到窗体中this.add(jsp, BorderLayout.CENTER);//放中间位置this.add(jp,BorderLayout.SOUTH);//放于底部//设置标题,大小,位置,关闭,可见this.setTitle("服务端");this.setSize(400,400);this.setLocation(300,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭则退出this.setVisible(true);/*****************服务端开始*******************///给发送按钮绑定监听事件,需要继承ActionListener接口jb.addActionListener(this);//给文本框绑定一个回车键事件,KeyListener接口jtf.addKeyListener(this);try {//1.创建SocketServerSocket serverSocket = new ServerSocket(serverPort);//2.等待客户端连接Socket socket = serverSocket.accept();//3.获取输入流,读数据InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));//4.获取输出流,写数据OutputStream os = socket.getOutputStream();bw = new BufferedWriter(new OutputStreamWriter(os));//循环读取数据String line = null;while ((line = br.readLine())!=null){//将读取到的数据置于文本域中jta.append(line+System.lineSeparator());//内容后面接上换行}//5.关闭Socket通道serverSocket.close();} catch (IOException e) {e.printStackTrace();}/*****************服务端结束*******************/}
/*** @Author zzs* @Description //TODO 监听按钮事件* @Date 21:49 2021/9/22* @Param [e]* @return void**/@Overridepublic void actionPerformed(ActionEvent e) {sendData();}
/*** @Author zzs* @Description //TODO 文本框回车键事件,3个方法,这里只需重写keyPressed方法* @Date 22:30 2021/9/22* @Param [e]* @return void**/@Overridepublic void keyPressed(KeyEvent e) {//回车键if (e.getKeyCode()==KeyEvent.VK_ENTER){//发送数据到socket通道中sendData();}}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}public void sendData(){//1.获取文本框中发送的内容String text = jtf.getText();//2.拼接发送的数据内容text = "服务端: "+text;//3.在服务端文本域中显示jta.append(text+System.lineSeparator());//4.发送数据try {bw.write(text);bw.newLine();//换行bw.flush();//刷新//5.清空文本框内容jtf.setText("");} catch (IOException ex) {ex.printStackTrace();}}public static void main(String[] args) {new Server();}
}

客户端:

package cs;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.Socket;
import java.util.Properties;/*** @author zzs* @date 2021/9/22 20:49*/
public class Client extends JFrame implements ActionListener, KeyListener {//文本域private JTextArea jta;//滚动条private JScrollPane jsp;//面板private JPanel jp;//文本框private JTextField jtf;//按钮private JButton jb;//输出流private BufferedWriter bw = null;//客户端的ip , 端口号private static String clientIP;private static int clientPort;static {Properties properties = new Properties();try {properties.load(new FileReader("chat.properties"));clientIP = properties.getProperty("clientIP");clientPort = Integer.parseInt(properties.getProperty("clientPort"));} catch (IOException e) {e.printStackTrace();}}public Client() {//初始化组件jta = new JTextArea();//文本域默认不可编辑jta.setEnabled(false);//将文本域添加到滚动条中实现滚动jsp = new JScrollPane(jta);jp = new JPanel();jtf = new JTextField(20);jb = new JButton("发送");//将文本框和按钮添加到面板中jp.add(jtf);jp.add(jb);//将滚动条和面板添加到窗体中this.add(jsp, BorderLayout.CENTER);//放中间位置this.add(jp,BorderLayout.SOUTH);//放于底部//设置标题,大小,位置,关闭,可见this.setTitle("客户端");this.setSize(400,400);this.setLocation(700,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭则退出this.setVisible(true);/*****************客户端开始*******************///发送按钮绑定监听事件jb.addActionListener(this);//给文本框绑定回车键事件jtf.addKeyListener(this);try {//1.创建SocketSocket socket = new Socket(clientIP, clientPort);//2.获取输入流,读数据InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));//3.获取输出流,写数据OutputStream os = socket.getOutputStream();bw = new BufferedWriter(new OutputStreamWriter(os));//循环读取数据String line = null;while ((line = br.readLine())!=null){jta.append(line+System.lineSeparator());}//4.关闭Socket通道socket.close();} catch (IOException e) {e.printStackTrace();}/*****************客户端结束*******************/}
/*** @Author zzs* @Description //TODO 客户端发送按钮监听事件* @Date 22:02 2021/9/22* @Param [e]* @return void**/@Overridepublic void actionPerformed(ActionEvent e) {sendData();}
/*** @Author zzs* @Description //TODO 客户端给文本框绑定一个回车键事件* @Date 22:39 2021/9/22* @Param [e]* @return void**/@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode()==KeyEvent.VK_ENTER){sendData();}}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}public void sendData(){//1.获取文本框中发送的数据内容String text = jtf.getText();//2.拼接发送的内容text = "客户端: "+ text;//3.在客户端文本域中显示jta.append(text+System.lineSeparator());try {//4.发送数据bw.write(text);//不换行和刷新,服务端会收不到信息bw.newLine();bw.flush();//5.清空文本框jtf.setText("");} catch (IOException ex) {ex.printStackTrace();}}public static void main(String[] args) {new Client();}
}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55380.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多家游戏交易平台发声,禁止未成年人买号租号

游戏租号绕开防沉迷系统事件迎来下文。9 月7 日,DD3737、交易猫、5173 等游戏交易平台相继发布声明,已采取严格措施禁止任何未成年人利用游戏交易平台买卖和租赁游戏账号。 同时,上述游戏交易平台还呼吁:游戏出版、发行、运营、交…

Vue3 TS setup 引入 markmap 思维导图,通过markdown解析成思维导图,集成到自己项目中

【前言】%(&(&……()* 最近刚好做了个项目,给大家分享一个Vue3 TS setup 如何引入 markmap 思维导图,markmap可以通过markdown解析成思维导图。我们如何将它集成到自己项目中? 【看图】还是先看图…

一文学会:使用ChatGPT做XMind思维导图

先下载工具:XMind工具下载 假设我现在是一个小白,我想入行人工智能,我想让ChatGPT帮我生成一个学习路线,并做成思维导图的形式,那首先,我要告诉ChatGPT我想要的主题是什么 Prompt1:“我是一个大学生&#x…

ChatGPT4:智能化聊天工具,为你的生活带来更高效、便捷和多样化的聊天体验

随着时代的发展,人们的生活越来越快节奏化,工作压力越来越大。因此,他们需要一个智能化、高效率的聊天工具,来更好地完成工作和娱乐。恰巧,ChatGPT4是这样的一款聊天工具,它通过人工智能技术能够与用户进行…

AI_News周刊:第一期

2023.02.06—2023.02.12 关于ChatGPT的前言: 在去年年末,OpenAI的ChatGPT在技术圈已经火了一次,随着上周它的二次出圈,ChatGPT算得上是人工智能领域的一颗明星,它在聊天机器人领域有着不可忽视的影响力。其准确、快速…

九龙证券|突然哑火!最火爆中小盘明显回调,后市咋走?机构最新解读

中证1000和国证2000指数创年内新高后,连续2日回调。 2月17日A股商场震动下行,创业板指数跌幅超2%,近3000只个股跌落,北向资金小幅净流入,商场成交额接近万亿关口,港股也出现显着回调痕迹。 以中小市值公司…

java程序员应聘优秀简历

年 龄:22 姓 名:___ 性 别:男 联系电话:____ 联系邮箱:____ 现住址: 专 业:计算机网络与电子商务 择业目标 Java软件工程师 基于Oracle数据库,MySQL数据库,Web应用的Java…

理性和感性 - 如何对待错误

上次的博客, 我写了一些关于 软件开发中的理性和感性决定 的故事。 不论是感性还是理性,我们的目的就是要把软件交给用户去用, 在软件行业中有这样一句俗话: 当你把产品交给用户的时候,你的学习才刚刚开始。 当然每个团…

【考研】关于联系导师的经验分享--目标院校:西北工业大学

前面的前面 今天打开了我的csdn,突然发现2019年发过的一篇问答稿竟然帮助了那么多人,我平时都是在csdn上搜问题,也没有想过分享。所以就想以后要多在这里记录我的经验了,方便自己也帮助他人~ 这是一篇尘封已久的经验稿&#xff…

怎么才能优雅地向导师表达「这周科研没什么进展」?

本文来源:知乎 大家讨论下:怎么才能优雅地向导师表达「这周科研没什么进展」? 导师看你做实验时 当你开组会时,用力屏住呼吸,心虚地躲在角落里。 高赞回复一 作者:FF LIU 1.模型已经基本搭建好,…

【学术相关】读研究生,从学会「拒绝」导师开始

自从进了实验室,自己就一头扎进文献的海洋中,偶尔出来透透气,接触最多的就是课题组的其他难兄难弟和导师。 导师、师门之间的种种联系细致而微妙。 今天小研和大家谈谈:如何拒绝别人。 1.为什么要谈「拒绝」 好多研究生都有这样的…

android耗电怎么解决方法,android os 耗电 严重问题及委婉解决方法

华为系统有个毛病,不管什么版本,不管是官方还是优化的,从2.3版本到现在的4.0,使用一段时间后就会大大的增加耗电量,表现为耗电排行中的“android os”耗电严重,遥遥领先其他硬件。这个问题是属于除了刷机无…

考研复试!电话联系导师须要注意什么呢?

在准备复试其中一项便是联系导师,用电话联系导师是大众考生选择的方式之一。那用电话联系导师有哪些注意事项需要关注呢?一起来了解一下。 电话联系导师须要注意什么呢? 如果你一定要打电话,可以参照如下的流程: (1)提前准备与导…

愤怒!竟然还有学校还在教 Java 的 Swing

昨天,有个读者私信我说,“老师正在教 Swing,这个知识点还需要学习吗?” 说句实在话,刚看到这个问题的时候,我是想骂娘的!不是骂读者啊,你懂得,骂学校,骂老师。…

现代软件工程 — 第三部分:文档

https://document360.com/blog/technical-documentation/ 文档是一个常年有争议的话题,因为根据我的经验,软件工程非常注重像源代码和运输功能这样的人工制品的商业价值,而不是其他。我经常听到有人说,我们应该只写敏捷实践中需要…

Go与神经网络:张量运算

0. 背景 2023年年初,我们很可能是见证了一次新工业革命的起点,也可能是见证了AGI(Artificial general intelligence,通用人工智能)[1]孕育的开始。ChatGPT应用以及后续GPT-4大模型的出现,其震撼程度远超当年AlphaGo战胜人类顶尖围…

Chat客服入门案例|商务智能对话客服(二)

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接…

线状图

控制器 页面

python画图填充线状阴影

x np.linspace(-4,4,9) y -x plt.plot(x,y)# 填充绿色大色块 plt.fill_between(x, 0, y, whereabs(x)>2,facecolorgreen, alpha0.3)#填充白色搞阴影 for i in np.linspace(2,8,40): # 第三个参数调整间距a x np.linspace(-8,4,9) # 可以调位置b a ic a i - 0.1plt.…