发送端

  1. //发送
  2. public class UDPChat01 {
  3. public static void main(String[] args) throws Exception {
  4. //开启端口
  5. DatagramSocket socket = new DatagramSocket(8888);
  6. while (true){
  7. //准备数据:创建控制台
  8. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  9. String data = reader.readLine();
  10. byte[] datas = data.getBytes();
  11. DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
  12. socket.send(packet);
  13. //退出
  14. if (data.equals("bye")){
  15. break;
  16. }
  17. }
  18. socket.close();
  19. }
  20. }

接收端

  1. //接受
  2. public class UDPChat02 {
  3. public static void main(String[] args) throws Exception {
  4. DatagramSocket socket = new DatagramSocket(6666);
  5. while (true){
  6. //准备接受包裹
  7. byte[] buf = new byte[1024];
  8. DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);
  9. socket.receive(packet);
  10. //判断结束
  11. byte[] data = packet.getData();
  12. String receiveData = new String(data, 0, data.length);
  13. System.out.println(receiveData);
  14. if (receiveData.equals("bye")){
  15. break;
  16. }
  17. }
  18. socket.close();
  19. }
  20. }

将方法封装

  1. //发送端
  2. public class TalkSender implements Runnable {
  3. DatagramSocket socket = null;
  4. BufferedReader reader = null;
  5. int fromPort;
  6. String toIp;
  7. int toPort;
  8. public TalkSender(String toIp, int fromPort, int toPort) {
  9. this.fromPort = fromPort;
  10. this.toIp = toIp;
  11. this.toPort = toPort;
  12. try {
  13. socket = new DatagramSocket(fromPort);
  14. reader = new BufferedReader(new InputStreamReader(System.in));
  15. } catch (SocketException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. @Override
  20. public void run() {
  21. while (true) {
  22. String data = null;
  23. try {
  24. data = reader.readLine();
  25. byte[] datas = data.getBytes();
  26. DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(toIp, toPort));
  27. socket.send(packet);
  28. //退出
  29. if (data.equals("bye")) {
  30. break;
  31. }
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. socket.close();
  37. }
  38. }
  1. public class TalkReceiver implements Runnable {
  2. DatagramSocket socket = null;
  3. int port;
  4. String msgFrom;
  5. public TalkReceiver(int port, String msgFrom) {
  6. this.port = port;
  7. this.msgFrom = msgFrom;
  8. try {
  9. socket = new DatagramSocket(port);
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. }
  13. }
  14. @Override
  15. public void run() {
  16. while (true) {
  17. //准备接受包裹
  18. byte[] buf = new byte[1024];
  19. DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);
  20. try {
  21. socket.receive(packet);
  22. //判断结束
  23. byte[] data = packet.getData();
  24. String receiveData = new String(data, 0, data.length);
  25. System.out.println(msgFrom + receiveData);
  26. if (receiveData.equals("bye")) {
  27. break;
  28. }
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. socket.close();
  34. }
  35. }
  1. public class Teacher {
  2. public static void main(String[] args) {
  3. new Thread(new TalkSender("127.0.0.1",6666,8888)).start();
  4. new Thread(new TalkReceiver(7777,"学生:")).start();
  5. }
  6. }
  1. public class Student {
  2. public static void main(String[] args) {
  3. System.out.println("------------咨询课程------------");
  4. new Thread(new TalkSender("localhost",5555,7777)).start();
  5. new Thread(new TalkReceiver(8888,"老师:")).start();
  6. }
  7. }

UDP实现在线聊天功能的更多相关文章

  1. 使用websocket实现在线聊天功能

    很早以前为了快速达到效果,使用轮询实现了在线聊天功能,后来无意接触了socket,关于socket我的理解是进程间通信,首先要有服务器跟客户端,服务的启动监听某ip端口定位该进程,客户端开启socke ...

  2. 基于PHP实现一个简单的在线聊天功能(轮询ajax )

    基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...

  3. Spring Websocket实现简易在线聊天功能

    针对Spring Websocket的实现,我参照了其他博主的文章https://www.cnblogs.com/leechenxiang/p/5306372.html 下面直接给出实现: 一.引入相 ...

  4. Java 网络编程 --基于UDP实现一对一聊天功能

    UDP 基本流程: UDP发送端基本流程: 1.使用DatagramSocket 指定端口 创建发送端 2.准备数据 一定转成字节数组 3. 封装成DatagramPacket 包裹,需要指定目的地 ...

  5. springboot+websocket实现简单的在线聊天功能

    效果如下: java实现逻辑: 1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId&g ...

  6. java Socket实现简单在线聊天(三)

    在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实 ...

  7. java Socket实现简单在线聊天(二)

    接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...

  8. java Socket实现简单在线聊天(一)

    最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持 ...

  9. SpringBoot+Vue+WebSocket 实现在线聊天

    一.前言 本文将基于 SpringBoot + Vue + WebSocket 实现一个简单的在线聊天功能 页面如下: 在线体验地址:http://www.zhengqingya.com:8101 二 ...

随机推荐

  1. Python自动化测试面试题-用例设计篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  2. 还不了解一下 Java 8 Predicate 函数接口

    同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...

  3. #使用C#winform编写渗透测试工具--子域名挖掘

    使用C#winform编写渗透测试工具--子域名挖掘 这篇文章主要介绍使用C#winform编写渗透测试工具--子域名挖掘.在渗透测试中,子域名的收集十分重要,通常一个网站的主站的防御能力特别强,而他 ...

  4. 【硬核】MMU是如何完成地址翻译的

    目录 1. 什么是虚拟内存? 2. 虚拟内存的作用 3. 虚拟内存与物理内存 3.1 CPU存取数据 3.2 物理地址常用术语 3.3 虚拟地址常用术语 3.4 页表常用术语 3.5 页命中/缺页 4 ...

  5. JavaScript-编译与闭包

    编译原理 尽管 JavaScript 经常被归类为"动态"或"解释执行"的语言,但实际上它是一门编译语言.JavaScript 引擎进行的编译步骤和传统编译语言 ...

  6. jdk的下载与安装教程

    最近在学逆向,就是要反编译人家的java代码,在这之前要先安装环境,下面是下载和安装JDK的教程: 1.JDK下载地址: http://www.oracle.com/technetwork/java/ ...

  7. CSS 即将支持嵌套,SASS/LESS 等预处理器已无用武之地?

    最近,有一则非常振奋人心的消息,CSS 即将原生支持嵌套 -- Agenda+ to publish FPWD of Nesting,表示 CSS 嵌套规范即将进入规范的 FWPD 阶段. 目前对应的 ...

  8. C++利用模板在Windows上快速调用DLL函数

    更新日志 --------- 2021/08/01 更新V2.2 增加 GetHmodule 函数 - 允许用户获取HMODULE以验证加载DLL是否成功. 2021/08/03 更新V2.3 增加 ...

  9. javaSE基础之变量,常量,作用域和运算符

    变量 变量是什么? 变量是可以变化得量 Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type varName [=v ...

  10. rancherUI添加configmap

    1.创建configmap 2.部署pod,挂载配置文件(通过卷的形式引用)