概述
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
呱?