通过UDP实现网络聊天

多线程实现UDP网络聊天

1. 编写UDP发送线程UdpSendThread


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;public class UdpSendTread implements Runnable{DatagramSocket datagramSocket = null;BufferedReader bufferedReader = null;InetSocketAddress inetSocketAddress = null;public UdpSendTread(int fromPort, int toPort, String toIp) {// 创建 upd sockettry {// 指定当前用户的Socket端口datagramSocket = new DatagramSocket(fromPort);} catch (SocketException e) {e.printStackTrace();}// 创建读入流bufferedReader = new BufferedReader(new InputStreamReader(System.in));// 发送信息的目标ip地址和端口号inetSocketAddress = new InetSocketAddress(toIp, toPort);}@Overridepublic void run() {while (true) {try {// 读入行System.out.println(datagramSocket.getLocalSocketAddress() + ": ");String data = bufferedReader.readLine();byte[] datas = data.getBytes();// 创建udp发送包DatagramPacket datagramPacket = new DatagramPacket(datas, datas.length, inetSocketAddress);// udp 发送datagramSocket.send(datagramPacket);} catch (IOException e) {e.printStackTrace();}}}
}

2. 编写UDP接受线程 UdpReceiveThread


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpReceiveTread implements Runnable {DatagramSocket datagramSocket = null;public UdpReceiveTread(int port) {// 当其用户socket端口try {datagramSocket = new DatagramSocket(port);} catch (SocketException e) {e.printStackTrace();}}@Overridepublic void run() {while (true) {try {// 创建接受udp socket包byte[] container = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(container, container.length);// 阻塞式接受udp数据datagramSocket.receive(datagramPacket);// DatagramPacket 获取接受到的数据byte[] data = datagramPacket.getData();// byte 转换 String 并输出String string = new String(data, 0, data.length);System.out.println(datagramSocket.getLocalSocketAddress() + ":" + string);} catch (IOException e) {e.printStackTrace();}}}
}

3. 编写用户1 Costomer_1

public class Costomer_1 {public static void main(String[] args) {// Udp 发送线程UdpSendTread sendTread = new UdpSendTread(8888, 9999, "127.0.0.1");// Udp 接受线程UdpReceiveTread receiveTread = new UdpReceiveTread(7777);new Thread(sendTread).start();new Thread(receiveTread).start();}
}

4. 编写用户2 Constomer_2

public class Costomer_2 {public static void main(String[] args) {// Udp 发送线程UdpSendTread sendTread = new UdpSendTread(6666, 7777, "127.0.0.1");// Udp 接受线程UdpReceiveTread receiveTread = new UdpReceiveTread(9999);new Thread(sendTread).start();new Thread(receiveTread).start();}
}

注意,用户类中的发送线程fromPort != 接受线程的port

5. 结果


JAVA网络编程 -UDP篇(简单实现网络聊天)相关推荐

  1. NIO网络编程实战之简单多人聊天室

    NIO网络编程实战 利用NIO编程知识,实现多人聊天室. 1. NIO编程实现步骤 第一步:创建Selector 第二步:创建ServerSocketChannel,并绑定监听端口 第三步:将Chan ...

  2. Java网络编程UDP编程

    一. 简单先介绍一下网络编程 1. 概念 : 通过网络IP连接起来,实现网络通信,数据传输的操作,就是网络编程 2. 实现 : 目前来说当前主要有两种实现的方法,TCP和UDP: 其中TCP需要划分客 ...

  3. 万物互联之~网络编程基础篇

    入门篇¶ 官方文档:https://docs.python.org/3/library/ipc.html(进程间通信和网络) 实例代码:https://github.com/lotapp/BaseCo ...

  4. 《C#网络编程高级篇之网页游戏辅助程序设计(扫描版)》

    <C#网络编程高级篇之网页游戏辅助程序设计>通过编写C#网络编程语言中具有代表性的实例,向读者深入细致地讲解了如何利用C#语言进行网页游戏辅助程序设计.本书通过大量的代码引导读者一步步学习 ...

  5. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口. 最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件 抖动窗口功能 ...

  6. 网络编程——TCP网络编程UDP编程

    1.计算机网络:将分布在不同区域不同地方的多台计算机和网络设备通过线程连接起来组成一套大型系统,来实现计算机之间的信息传递和资源共享的设备. 2.网络编程:编写一个程序来实现网络间信息传递. 网络编程 ...

  7. c++网络编程UDP

    c++网络编程UDP 服务器端: #include<WinSock2.h> #include<iostream>#pragma comment(lib,"ws2_32 ...

  8. python网络编程内容_图解Python网络编程

    Python Python开发 Python语言 图解Python网络编程 本篇索引 (1)基本原理 本篇指的网络编程,仅仅是指如何在两台或多台计算机之间,通过网络收发数据包:而不涉及具体的应用层功能 ...

  9. python网络编程(1):客户端与网络编程简介

    python网络编程(1):客户端与网络编程简介 很多情况下,网络编程就是选择并使用一个已经支持所需网络操作的库的过程. 1.使用pygeocoder实现地址和经纬度的转换 通过pipenv创建虚拟环 ...

最新文章

  1. powershell创建iis站点、应用程序及应用程序池
  2. 将MPM雪模拟移植到Maya
  3. 求大数阶乘(10000以内)
  4. 从实例入手学习使用vue+axios配置代理进行跨域访问百度音乐API
  5. RTC 技术知识体系
  6. 深入理解RCU | RCU源码剖析
  7. 计算机网络(十四)-CSMA/CD协议
  8. 两个list取交集_利用jieba计算两个句子的相似度
  9. 得推家政派单系统源码 v1.0
  10. Matlab--二次多项式曲面拟合
  11. 热敏电阻如何查表计算温度_额温枪温补算法:热电堆温度补偿算法 MTP10B7F55
  12. 就这样进入了前端开发
  13. PCA方法从原理到实现
  14. 即时通讯 音视频 开发技术
  15. Opencv之色度图
  16. CSDI2018广州关于《Nginx》的分享(附文字速录与PPT)
  17. 统一数据接入实践分享
  18. 支付系统总结 ( 收单,收银,资产交互,账务 )
  19. macOS Monterey 怎么升级?macOS 12升级教程
  20. OpenCASCADE7.6编译

热门文章

  1. 《2022元宇宙黑客松》ThreeX专场
  2. java程序连接redis服务器
  3. java 中文转码_java 下载文件中文名称转码详解
  4. RK3568平台开发系列讲解(图像篇)BMP图像处理
  5. Utf8和Unicode转换问题 C语言 千字文问题
  6. 关于如何租一个云服务器进行使用
  7. 基于QT开发的开源局域网联机UNO卡牌游戏报告(附github仓库地址)
  8. 基于GOP的时域滤波
  9. uarl 1019 涂色
  10. pycharm python interpreter是空的