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

呱?