Java网络编程,一对一聊天

 **这个小任务是来自于B站,他的视频名字就是“Java实现实时聊天互动程序”**

要求:就是有2个类,其中一个客户端和一个服务端。要实现从客户端发消息,不仅在客户端,而且也要在服务端也显示。实现客户端和服务端之间的简单聊天。

代码:①----->QqFu类

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class QqFu extends JFrame implements ActionListener{public static void main(String[] args){new QqFu();   }// 说明:一个类需要页面的显示,则那个类要继承JFrame。// 属性// 文本域private JTextArea jta;// 滚动条private JScrollPane jsp;// 面板里面是文本框和按钮private JPanel jp;private JTextField jtf;private JButton jb ;BufferedWriter bw = null;// 构造器public QqFu(){// 初始化上面的属性jta = new JTextArea();// 将文本域添加到滚动条中jsp = new JScrollPane(jta);jp = new JPanel();jtf =new JTextField(15);jb = new JButton("发送");// 把按钮和文本框添加到面板中jp.add(jtf);jp.add(jb);// 把滚动条和面板添加到JFrame中去this.add(jsp,BorderLayout.CENTER); //这个设置在中间this.add(jp,BorderLayout.SOUTH); //南this.setTitle("qq聊天 客户端");this.setSize(500,500);this.setLocation(200, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);jb.addActionListener(this);// 回车点击事件jtf.addKeyListener(new KeyAdapter() {public void keyTyped(KeyEvent e) {if((char)e.getKeyChar()==KeyEvent.VK_ENTER) {useVoid01();            }}});try{/*******客户端 TCP协议*********/// 1.创建一个客户端的套接字(尝试连接)Socket socket = new Socket("127.0.0.1",8888);// 2.获取socket通道的输入流BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 3bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String line = null;while((line = br.readLine()) !=null){jta.append(line + "\n");}// 3. 获取输出流// 4.关闭流socket.close();/******************************/}catch(Exception e){e.printStackTrace();}}public void actionPerformed(ActionEvent e){useVoid01();}public void useVoid01(){// 1.获取文本框中需要发送的内容String text = jtf.getText();// 2. 拼接内容text = "客户端对服务端说:" + text;// 3.自己显示jta.append(text + "\n");try{// 4.发送bw.write(text);bw.newLine(); // 换行 bw.flush();  // 刷新// 5.清空jtf.setText("");}catch(IOException e1){e1.printStackTrace();}}//行为
}

代码:②----->QqMain类

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class QqMain extends JFrame implements ActionListener{public static void main(String[] args){new QqMain();   }// 说明:一个类需要页面的显示,则那个类要继承JFrame。// 属性// 文本域private JTextArea jta;// 滚动条private JScrollPane jsp;// 面板里面是文本框和按钮private JPanel jp;private JTextField jtf;private JButton jb ;BufferedWriter bw  = null;// 构造器public QqMain(){// 初始化上面的属性jta = new JTextArea();// 将文本域添加到滚动条中jsp = new JScrollPane(jta);jp = new JPanel();jtf =new JTextField(15);jb = new JButton("发送");// 把按钮和文本框添加到面板中jp.add(jtf);jp.add(jb);// 把滚动条和面板添加到JFrame中去this.add(jsp,BorderLayout.CENTER); //这个设置在中间this.add(jp,BorderLayout.SOUTH); //南this.setTitle("qq聊天 服务端");this.setSize(500,500);this.setLocation(200, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);/***********TCP协议*************/jb.addActionListener(this);  // 这是按钮点击使用// 回车键的监听事件 在接口KeyListener中//jtf.addKeyListener(this);jtf.addKeyListener(new KeyAdapter() {public void keyTyped(KeyEvent e) {if((char)e.getKeyChar()==KeyEvent.VK_ENTER) {useVoid();}}});try{// 1.创建一个服务端的套接字ServerSocket serverSocket = new ServerSocket(8888);//2.等待客户端的连接Socket socket = serverSocket.accept();// 3.获取socket通道的输入流(输入流的读取方式为一行一行的读取方式 ----> readLine())BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 4.获取通道的输入流(也是一行一行的写出  BufferedWriter ->newLine())// 当用户点击“发送”按钮的时候才会,写出数据bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String line = null;while((line = br.readLine()) !=null){// 将读取的数据拼接到文本域中显示jta.append(line + "\n");}// 5.关闭socket通道serverSocket.close();}catch(IOException e){e.printStackTrace();}/************************/}// 点击按钮所实现的方法public void actionPerformed(ActionEvent e){useVoid();}public void useVoid(){// 1.获取文本框中的内容String text = jtf.getText();text = "服务端对客户端说:" + text;// 自己显示jta.append(text + "\n");// 2.发送try{// 4.发送bw.write(text);bw.newLine(); // 换行 bw.flush();  // 刷新// 5.清空文本框jtf.setText("");}catch (IOException e1){e1.printStackTrace();}}/*public void KeyPressed(KeyEvent e){//回车键System.out.println("按钮数字");}public void KeyTyped(KeyEvent e){}public void KeyReleased(KeyEvent e){}*///行为
}

效果展示:

这里面的什么通信协议我就是照着抄的,不过在这个里面还是可以学到一些东西的,对于swing的使用吧。里面的获取输入的内容,和输出获取的内容,还用那个清空。

Java网络编程,一对一聊天相关推荐

  1. java 网络编程简单聊天_网络编程之 TCP 实现简单聊天

    网络编程之 TCP 实现简单聊天 客户端 1.连接服务器 Socket 2.发送消息 package lesson02;import java.io.IOException;import java.i ...

  2. java网络编程-实现聊天程序

    利用Datagramsocket创建连接,实现UDP,并使用多线程实现教师端和学生端的聊天. 接收端的程序如下: // // Source code recreated from a .class f ...

  3. java全双工_java网络编程TCP聊天全双工

    我正在实现服务器和客户端之间的简单TCP聊天.我使用多线程,因此服务器和客户端可以同时发送和接收数据(全双工).该程序可以工作,但如果服务器有一个控制台既可以输入发送消息,也可以显示接收消息(对于客户 ...

  4. Java网络编程,使用Java实现UDP和TCP网络通信协议,以及基于UDP的在线聊天室。

    文章目录 前言 一.网络编程概念 1.网络 2. 网络编程的目的 3.想要达到这个效果需要什么 4.网络分层 二.网络编程Java类 1.IP地址:InetAddress 2.端口 3.TCP连接 3 ...

  5. java网络编程,通过TCP,Socket实现多对一的局域网聊天室

    java网络编程,通过TCP,Socket实现多对一的局域网聊天室 可以实现多个客户端连接服务器,服务器接收到信息就会把信息广播到所有的客户端 这是服务器端的代码 View Code import j ...

  6. Java网络编程学习——简单模拟在线聊天

    Java网络编程学习--简单模拟在线聊天 学了java网络,也是该做个小案例来巩固一下了. 本次案例将使用UDP和多线程模拟即时聊天,简单练练手. 1.前提知识 需要知道简单的IO流操作,以及简单的U ...

  7. java网络编程-聊天室

    目录 V01 # 聊天室客户端(V1) # 聊天室服务端(V1) V02 # 聊天室客户端(V2) # 聊天室服务端(V2) V03 V04 # 聊天室客户端(V4) # 聊天室服务端(V4) V05 ...

  8. Java 网络编程(超级详细)

    前言:本文是初学Java网络编程时所记录的学习笔记,方便以后查阅学习,同时也作为资料总结分享给大家,如果有问题欢迎指出!! 1. 网络编程 1.1 网络编程基本概念 1.网络 将不同区域的电脑连接到一 ...

  9. JAVA 网络编程技术学习笔记

    目录 一.网络编程基本概念(了解) 1.1 计算机网络 1.2 网络通信协议 1.2.1什么是网络通信协议 1.2.2 OSI七层协议模型 1.2.3网络协议的分层 1.3数据的封装和解封 1.4 I ...

最新文章

  1. 通过全局路由表的方式实现MPLS ***上互联网
  2. 分享一篇关于使用阿里云消息队列中遇到的坑
  3. 把Windows上的文件拷贝到AWS Linux系统上
  4. android用户界面-菜单
  5. 头像和Karma汽车
  6. java私有表示标识_java里面的标识符、关键字和类型
  7. 让MySQL速度提升3倍的19种优化方式
  8. idea 修改样式要编译_在IDEA中DEBUG Javac源码
  9. oform java_客户端表单通用验证checkForm(oForm)(1)
  10. 奇异值分解(SVD)详解
  11. 现在每天虽然比较早到达公司,鸡腿中午8:30接到施电话
  12. android重新打开应用程序,关于安卓应用后台运行后,重新进入,应用重新打开问题...
  13. 一种深度学习方法---迁移学习
  14. BUUCTF-MISC-被劫持的神秘礼物~梅花香之苦寒来
  15. 手机做证件照的方法是什么
  16. OSINT 和 15 大开源情报工具
  17. Docker 数据卷重复挂载测试
  18. Linux GPIO操作分析 - Exynos 5260
  19. 路的选择与人生的哲思──读《未选择的路》
  20. H5新增表单元素、控件

热门文章

  1. CSP-S 2021 游记
  2. 三国志11威力加强版win7 64bit运行失败解决方法
  3. 多邻国(Duolingo)内推,来了!
  4. ARP和DNS欺骗以及网站钓鱼分析
  5. 几个常用的ASP木马
  6. 服务器安装Centos 7系统
  7. 刚买个炼狱蝰蛇1800dpi的下完驱动提示没有发现鼠标
  8. 面试:如何应对人事的面试
  9. Ubuntu18.04安装WPS字体缺失的解决方案
  10. 【JavaScript】ES5和ES6面向对象