UDP实现多人聊天室
时间:2022-07-28
本文章向大家介绍UDP实现多人聊天室,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
概述
1.先运行接收方,避免收不到一开始的数据造成数据丢失 2.端口不能是-1, 数值在1-65535之间的任意一个整数,一般会选大于1024的,小于1024的一般被本地计算机程序占用。
1.接收方Receiver
package d03_chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* zt
* 2020/8/11
* 10:13
* 接收方
*
* System.out.println(dp.getAddress().getHostAddress()+":"+data);
* getAddress方法和getHostAddress类似,它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址,而getAddress方法返回的是byte数组形式的IP地址。
*/
public class ChatReceiver {
public static void main(String[] args) {
DatagramSocket ds = null;
System.out.println("聊天室已经启动......");
try {
//1.创建一个socket
ds = new DatagramSocket(8899);
//2.创建一个数据报包 <64K
byte[] buf = new byte[1024 * 20];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//3.接收
while (true) {
ds.receive(dp);
//4.处理数据
String data = new String(dp.getData(), 0, dp.getLength());
System.out.println(dp.getAddress().getHostAddress()+":"+data);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ds.close();
}
}
}
2.发送方Sender
package d03_chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/**
* zt
* 2020/8/11
* 10:17
* 发送方
*/
public class ChatSender {
public static void main(String[] args) {
DatagramSocket ds=null;
try {
//1.创建
ds = new DatagramSocket();
//2.发送包
Scanner sc = new Scanner(System.in);
while (true){
String data = sc.next();
DatagramPacket dp = new DatagramPacket(data.getBytes(),data.getBytes().length, InetAddress.getByName("10.0.139.255"),8899);
ds.send(dp);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
ds.close();
}
}
}
3.运行结果(这里我把接收方的:。。。删除了)所以接收到的IP带/
String data = new String(dp.getData(), 0, dp.getLength());
System.out.println(dp.getAddress().getHostAddress()+":"+data);)
中的getHostAddress()删除了,测试一下getAddress()与getHostAddress()区别:
getAddress方法和getHostAddress类似,它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址,而getAddress方法返回的是byte数组形式的IP地址。
要想ip前面不带/,写dp.getAddress().getHostAddress()就好
ChatReceiver
聊天室已经启动......
/10.0.139.3:到不锋利马太瘦,你拿什么和我斗
/10.0.139.248:886
/10.0.139.160:呱?
/10.0.139.103:你蛋回头 必有理由
/10.0.139.103:要么反杀 要么报仇
/10.0.139.97:12
/10.0.139.215:∑
/10.0.139.97:89
/10.0.139.3:花花世界迷人眼
/10.0.139.174:�
/10.0.139.195:1234
/10.0.139.97:】【
/10.0.139.195:1111
/10.0.139.3:铁汁
/10.0.139.195:1
/10.0.139.174:�
/10.0.139.174:来
/10.0.139.174:gan
/10.0.139.174:886
/10.0.139.103:苟
/10.0.139.103:利
/10.0.139.3:bye
/10.0.139.103:国
/10.0.139.103:家
/10.0.139.103:生
/10.0.139.35:人生苦短
/10.0.139.103:死
/10.0.139.165:niahao
/10.0.139.103:矣
/10.0.139.179:你***,我****,真是***狗了
/10.0.139.103:人生苦短 必须性感
/10.0.139.44:lll
/10.0.139.5:1213231
/10.0.139.5:shaoshao
/10.0.139.134:45132465131321515
/10.0.139.134:5
/10.0.139.134:5
/10.0.139.134:45
/10.0.139.134:15
/10.0.139.134:5
/10.0.139.134:5
/10.0.139.134:515
/10.0.139.134:4
/10.0.139.134:515
/10.0.139.134:65
/10.0.139.134:151
/10.0.139.213:wofule
/10.0.139.103:我**你个**** *****你*我****
/10.0.139.103:出口成章
/10.0.139.141:haloua
/10.0.139.103:
/10.0.139.180:123
/10.0.139.35:我铸玺不服
/10.0.139.180:321
/10.0.139.103:这里各个都是人才 说话又好听
/10.0.139.3:张口就来?
/10.0.139.103:我超喜欢在这里的感觉
/10.0.139.218:****
/10.0.139.35:宗哥在此
/10.0.139.140:*****
/10.0.139.218:开局一条鲲进阶全靠吞
/10.0.139.103:哈哈哈哈哈 你************
/10.0.139.141:我郝海荣最棒
/10.0.139.179:老夫聊发少年狂,治肾亏,不含糖,三百年,九芝堂
/10.0.139.180:你艾希我奶妈
/10.0.139.103:爱
/10.0.139.174:�
/10.0.139.179:你看我牛*吗
/10.0.139.3:圆圆是我的
/10.0.139.213:少�
/10.0.139.35:你看我还有机会吗
/10.0.139.103:兄弟你细嗦
/10.0.139.180:我赵日天第一个不服
/10.0.139.174:�
/10.0.139.5:祖安王者在此
/10.0.139.103:《》安
/10.0.139.3:无机会
/10.0.139.35:黄铭你过来呀
/10.0.139.140:重金求子
/10.0.139.32:123
/10.0.139.103:《先穿裤子后穿鞋 先当孙子后当爷
/10.0.139.32:123446
/10.0.139.165:yiqungsharena
/10.0.139.103:三十年河东三十年河西
/10.0.139.168:http:***.com
/10.0.139.103:你河东山花遍野你笑我河西便也空空
/10.0.139.165:疯了
/10.0.139.213:�
/10.0.139.103:带到春去入冬
/10.0.139.140:重金求子
/10.0.139.140:加V:1186040304
/10.0.139.103:你河东山花早已埋入雪中
/10.0.139.134:�������������������������������������������������������������
/10.0.139.103:再看我河西 满山轻松
ChatSender
呱?
- React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)
- POJ 2646 The Trip
- React多页面应用2(处理CSS及图片,引入postCSS,及图片处理等)
- 图的广度优先搜索和深度优先搜索(邻接链表表示)邻接链表广度优先搜索深度优先搜索运行结果
- JOJ 2680 Problem F: Coin Game
- React多页面应用1(webpack开发环境搭建,包括Babel、热更新等)
- JOJ 2676 Problem B
- React项目配置2(自己封装Ajax)
- React项目配置1(如何管理项目公共js方法)
- c++中stack、queue、vector的用法一、栈(stack)二、队列(queue)三、向量(vector)
- React技巧7(TodoList实现3组件之间传递数据之优化)
- React技巧6(TodoList实现2组件之间传递数据)
- POJ A Knight's Journey
- React技巧5(TodoList实现)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [译] Object.assign 和 Object Spread 之争, 用谁?
- 急速 debug 实战二(浏览器 - 调试线上篇)
- via the 'serverTimezone' configuration property
- 急速 debug 实战一(浏览器-基础篇)
- MongoDB系列一: Replica Set 集群搭建实战
- 函数式编程看React Hooks(一)简单React Hooks实现
- 函数式编程看React Hooks(二)事件绑定副作用深度剖析
- Vue 开发必须知道的 36 个技巧【近1W字】
- 吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧《上》
- 【漫游Github】无编译/无服务器,实现浏览器的 CommonJS 模块化
- 《秋风日常第一期》白板协作工具 LeanBoard
- 《秋风日常第二期》一个快速找出待SEO图片的技巧
- 《模块化系列》snowpack,提高10倍打包速度。
- 《秋风日常第三期》11个前端开发者必备的网站
- 专为程序员定制的垃圾清理工具(Node Cli实现)