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

你可能感兴趣的:(java)