UDP聊天案例

  做一个网络编程相关的案例,想着用利用UDP的快速且不用连接的优点做一个聊天室,我们一个聊天程序需要可以接收消息,也要可以发送消息,所以我们的DatagramSocket对象不但需要调用send函数,还需要调用recieve函数。

  而且由于聊天的特殊性,有可能在你发送的时候有消息需要接收,所以我们需要用到线程,开启两个线程,一个负责接收,一个负责发送,为了清晰起见,我们将收发消息各封装在两个实现了runnable接口的类中,然后重写run方法,内容就是消息的收或者发。

  在实现操作的时候,开启两个这样的程序,即可与自己聊天了(沙雕嗷~~),当然如果将IP最后一段改成广播形式,那这个局域网内的人都可以收到,即群聊。

接收消息的类

//接收任务
class Receive implements Runnable{ private DatagramSocket ds; //私有成员是一个对象,由他调用recieve函数 public Receive(DatagramSocket ds) { //构造器
super();
this.ds = ds;
} @Override
public void run() { System.out.println("udp 接收端 run"); while(true)
{
try {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp); String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+": "+text);
if(text.equals("886"))
{
System.out.println(ip+"...离开聊天室");
}
} catch (Exception e) { } }
}
}

发送消息的类

//发送任务
class Send implements Runnable{ private DatagramSocket ds; public Send(DatagramSocket ds) {
super();
this.ds = ds;
} @Override
public void run() { System.out.println("udp 发送端 run"); try {
//将数据封装到数据包中。数据包对象是DatagramPacket。数据来自于键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null; while ((line = bufr.readLine()) != null)
{
byte[] buf = line.getBytes(); //将数据转成字节数组
//将字节数组封装到数据包中
//如果IP改为121.255.255.255,最后一位是255,通知所有的主机
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("121.255.255.21"), 10003);
ds.send(dp); if("886".equals(line))
break;
} ds.close();
}catch(IOException e) { }
} }

主类

public class UdpChatTest {
/**
* 案例一:通过udp实现群聊程序
*
* 思路:
* 这个程序既有收又有发,需要同时执行,需要多线程技术
* 一个线程复制发,一个线程负责收。需要两个任务
* @throws IOException
*/ public static void main(String[] args) throws IOException { //发送端的socket 接收端的socket
DatagramSocket sendDs = new DatagramSocket();
DatagramSocket ReceDs = new DatagramSocket(10006); //创建两个任务对象
Send send = new Send(sendDs);
Receive rece = new Receive(ReceDs); //创建线程对象,并把任务对象传入
Thread t1 = new Thread(send);
Thread t2 = new Thread(rece); //开启线程
t1.start();
t2.start();
}
}

案例——UDP聊天的更多相关文章

  1. 026.2 网络编程 UDP聊天

    实现,通过socket对象 ##############################################################需求建立UDP发送端:###思路:1.建立可以实 ...

  2. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  3. python—多任务版udp聊天机器人

    将多任务(多线程)引入到udp聊天机器人,可以实现同时发送消息和接收消息 import socket import threading def udp_send(udp_socket,ip,port) ...

  4. Python--网络编程学习笔记系列01 附实战:udp聊天器

    Python--网络编程学习系列笔记01 网络编程基本目标: 不同的电脑上的软件能够实现数据传输 网络编程基础知识: IP地址: 用来在网络中标记一台电脑  网络号+主机号(按网络号和主机号占位分类A ...

  5. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  6. QT UDP聊天小程序

    利用QT的UDP技术,实现两个QT程序之间的聊天程序. #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include < ...

  7. java Socket Udp聊天

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...

  8. Java使用UDP聊天程序

    主要想测试Java UDP通信.Java UDP使用DatagramSocket和DatagramPacket完成UDP通信 主要思路: 1.本机通信,ip地址为:127.0.0.1 2.开一个线程监 ...

  9. QT开发之旅-Udp聊天室编程

    一.概要设计 登录对话框(继承自QDialog类)进行用户登录查询数据库用户是否存在,注册插入数据到用户表.用户表字段: (chatid int primary key, passwd varchar ...

随机推荐

  1. 监控软件之open-falcon安装、配置篇

    2019-07-10 一.open-falcon简介 open-falcon是由小米运维团队,从互联网公司角度为出发点,开发出来的一套面向互联网行业的企业级的开源监控系统,截至2019年7月,open ...

  2. springcloud集成kafka

    项目名称:布控预警 水平拆分出来的项目,作为一个单独的可以对外提供服务的项目 项目设计:springcloud,可以集成各个不同平台的一个作为对外提供的微服务项目 项目功能:实现各个平台和本平台之间的 ...

  3. 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务

    更多云原生技术资讯可关注阿里巴巴云原生技术圈. Puppeteer 是什么? puppeteer 官网的介绍如下: Puppeteer is a Node library which provides ...

  4. 设计模式GOF23(创建型模式)

    • 创建型模式:  单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式.   • 结构型模式: –适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.   • 行为型模式: 模 ...

  5. 移动开发在路上-- IOS移动开发 五 网络请求封装

    接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...

  6. 香港6合彩数据分析 V1.0

    最近写了个VBA小工具,分析香港6合彩中奖的概率,得出的结果不尽人意,但至少不会让你赔钱,嘿嘿! 点此链接获取 密码:3u65

  7. seaborn 数据可视化(二)带有类别属性的数据可视化

    Seaborn的分类图分为三类,将分类变量每个级别的每个观察结果显示出来,显示每个观察分布的抽象表示,以及应用统计估计显示的权重趋势和置信区间: 第一个包括函数swarmplot()和stripplo ...

  8. 【Webpack】373- 一看就懂之 webpack 高级配置与优化

    本文原载于 SegmentFault 社区专栏 前海拾贝 作者:JS_Even_JS 一.打包多页面应用 所谓打包多页面,就是同时打包出多个 html 页面,打包多页面也是使用 html-webpac ...

  9. 【CSS】330- 手把手教你玩转 CSS3 3D 技术

    点击上方"前端自习课"关注,学习起来~ CSS3的3D起步 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective).旋转(rotate)和移动(transla ...

  10. 每周一练 之 数据结构与算法(Set)

    这是第四周的练习题,五一放假结束,该收拾好状态啦. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数据结构与算法(LinkedList) 2.每周一练 之 ...