A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© _J2EE_LiXiZhen 中级黑马   /  2017-11-26 22:43  /  1012 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我的文件可以传输但是大小会比源文件多些字节,还有就是无法让服务器读到停止标签,付源码,望大神多多提点~~~

客户端代码:
[Java] 纯文本查看 复制代码
public class UDP_Send {
	public static void main(String[] args) throws IOException {

		// 创建输入流,将客户端本地文件读到内存
		FileInputStream in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\b.png");

		// 创建packet包装数据
		byte[] b = new byte[1024];
		while (true) {
			int len = in.read(b);
			if (len != -1) {
				// 使用客户端随机端口向服务器传输信息
				DatagramSocket ds_send = new DatagramSocket();
				DatagramPacket dp_send = new DatagramPacket(b, len, InetAddress.getLocalHost(), 45667);
				// 向服务器发送数据包
				ds_send.send(dp_send);
				ds_send.close();
			}else {
				// 向服务器传入结束标签
				 DatagramSocket ds_send = new DatagramSocket();
				 byte[] end = "end".getBytes();
				 DatagramPacket dp_send = new DatagramPacket(end, end.length, InetAddress.getLocalHost(), 45667);
				 ds_send.send(dp_send);
				 ds_send.close();
				 break;
			}
		}
		in.close();
		System.out.println("正在上传....");
		// 创建DatagramSocket接收服务器反馈<接收端口46667>
		DatagramSocket ds_receive = new DatagramSocket(46667);
		byte[] message = new byte[1024];
		DatagramPacket dp_receive = new DatagramPacket(message, message.length);
		// 接收响应
		ds_receive.receive(dp_receive);
		// 解析到控制台
		byte[] result = dp_receive.getData();
		System.out.println(new String(result));
		// 关流
		ds_receive.close();
	}
}


服务器端代码:
[Java] 纯文本查看 复制代码
public class UDP_Receive {
	public static void main(String[] args) throws SocketException, IOException {
		System.out.println("服务器开启.....");

		// 创建输出流,将内存文件保存到服务器硬盘
		FileOutputStream out = new FileOutputStream(System.currentTimeMillis() + ".png");

		// 创建DatagramSocket指定接收端口
		DatagramSocket ds_receive = new DatagramSocket(45667);
		byte[] receive = new byte[1024];
		DatagramPacket dp_receive = new DatagramPacket(receive, receive.length);

		System.out.println("等待上传...");
		// 接收客户端数据,遇到结束标签退出
		while (true) {
			ds_receive.receive(dp_receive);//最后一步读到这里停止了
			byte[] b = dp_receive.getData();
			String data = new String(b);
			// 判断是否结束
			if (data.trim().endsWith("end")) {
				ds_receive.close();
				break;
			}
			// System.out.println(data);不写这句话正常
			// 文件写到硬盘
			out.write(b);
		}
		// 关闭流
		out.close();
		ds_receive.close();
		System.out.println("保存成功!");

		// 向客户端发送响应信息
		DatagramSocket ds_send = new DatagramSocket();
		byte[] message = "上传成功!".getBytes();
		DatagramPacket dp_send = new DatagramPacket(message, message.length, InetAddress.getLocalHost(), 46667);
		ds_send.send(dp_send);
		// 关流
		ds_send.close();
	}
}

1 个回复

倒序浏览
问题已解决!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马