UDP:发送信息,接收信息/发送文件,接收文件
一:
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)端口号要避免已被各大数据库占用的 避免后期连接数据库发生不必要的错误 接收方填写的端口号要和发送方填写的端口号保持一致 最后小编有请大家敲代码的时候要信心哦