一:
UDP:发送信息,接收信息
UDP:发送信息 (发送方)
代码如下:
try {
//定义发送的人
DatagramSocket ds=new DatagramSocket();
//定义发送的内容
String str="辉辉爱学习!";
//定义包裹 切记 端口号千万要避免已被数据库占用的 避免后面不必要发生的错误
DatagramPacket dp=new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"),8848);
//发送
ds.send(dp);
//关闭流
ds.close();
System.out.println("发送完毕");
} catch (Exception e) {
e.printStackTrace();//打印异常信息
}
UDP: 接收信息 (接收方)
代码如下:
try {
//定义接收的人
DatagramSocket ds=new DatagramSocket(8848);//端口号必须保持与发送方定义的端口号一致
//定义数组
byte[] bs=new byte[20];
//定义接收包裹
DatagramPacket dp=new DatagramPacket(bs, bs.length);
System.out.println("准备接收");
//开始接收
ds.receive(dp);
//byte转String
String str=new String(bs);
//关流
ds.close();
System.out.println("接收到:"+str);
} catch (Exception e) {
e.printStackTrace();
}
有些新手小伙伴感觉代码写的没毛病!就是会发现以下这种奇葩错误 该怎么解决呢 由小编来告诉大家吧!!!
1.我运行了发送方
2.我运行了接收方 怎么发送过来的消息迟迟不来呢 ???
答:看以下代码 给你答案
第一步:我们要先运行接收方(因为发送文件很快 让接收方处于控制台等待状态)
第二步:我们在运行发送方
第三步:切换到接收方 就接收成功啦!
二:
UDP 发送文件,接收文件
第一步:接收文件(接收方)
代码如下:
try {
//定义要接收的文件
DatagramSocket ds=new DatagramSocket(8888);//切记 端口号千万要避免已被数据库占用的 避免后面不必要发生的错误
//定义包裹
DatagramPacket dp=null;//先等于空
//定义文件
File file=new File("E:\\2222.png");
//定义写流
FileOutputStream fos=new FileOutputStream(file);
//定义包装写流
BufferedOutputStream bos=new BufferedOutputStream(fos);
//定义数组
byte [] b=new byte[200];
//边读边写
while(true) {
dp=new DatagramPacket(b, b.length);
//开始接收
ds.receive(dp);
//判断接收来的结束包
if(new String(b).contains("bye")) {
break;
}
//开始写入本地
bos.write(b);
//刷新
bos.flush();
}
//关闭资源
ds.close();
bos.close();
System.out.println("接收完毕");
} catch (Exception e) {
}
第二步:发送文件(发送方)
代码如下
try {
//定义文件
File file=new File("C:\\ppt\\222.png");
//文件读流
FileInputStream fis=new FileInputStream(file);
//文件包装读流
BufferedInputStream bis=new BufferedInputStream(fis);
//定义发送的人
DatagramSocket ds=new DatagramSocket();//无参的构造函数
//定义包裹
DatagramPacket dp=null;//先等于null
//定义一个byte数组
byte[] b=new byte[200];
while(true) {
//开始读
int n = bis.read(b);//二百二百个的读
if(n==-1) {
break;
}
Thread.sleep(10);//休眠 以避免发送/读取...太快发现漏包状态(丢失数据)
//开始写
dp=new DatagramPacket(b, b.length, InetAddress.getByName("192.168.101.166"), 8888);
//开始发送
ds.send(dp);
}
//重点:切记要发送结束包 否之接收方会一直接收处于接收状态
//发送结束包裹
dp=new DatagramPacket("bye".getBytes(), "bye".getBytes().length, InetAddress.getByName("192.168.101.166"), 8888);
//发送
ds.send(dp);
//关闭资源
ds.close();
bis.close();
System.out.println("发送完毕");
} catch (Exception e) {
e.printStackTrace();
}
总结: 以上UDP发送信息,接收(信息/文件) 要先运行接收方 IP地址要保持和自己连接的局域网一致(本地127.0.0.1)端口号要避免已被各大数据库占用的 避免后期连接数据库发生不必要的错误 接收方填写的端口号要和发送方填写的端口号保持一致 最后小编有请大家敲代码的时候要信心哦