java网络编程六:DatagramSocket类简单实现文件下载

1、服务器端代码

package demo.net;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 下载服务器,采用UDP协议,传送的过程中可能会丢包,导致下载的文件不完整
 */
public class DownloadServer {
	// 提供服务
	public void service() {
		try {
			// 创建本机指定端口8289的服务器
			DatagramSocket dataSocket = new DatagramSocket(8289);
			// 线程池,固定有十个线程
			ExecutorService ThreadPool = Executors.newFixedThreadPool(10);

			while (true) {// 不断接收来自客户端的请求
				byte[] buff = new byte[101];// 文件名长度不超过50
				DatagramPacket dataPacket = new DatagramPacket(buff, buff.length);
				dataSocket.receive(dataPacket);// 等待接收来自客户端的数据包
				// 接收到数据包,开一个线程为该客户服务
				ThreadPool.execute(new WorkThread(dataPacket));
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 内部类,为每个客户提供服务
	private class WorkThread implements Runnable {
		private DatagramPacket packet;
		private DatagramSocket dataSocket;

		public WorkThread(DatagramPacket packet) {
			this.packet = packet;
			try {// 创建本机可以端口的DatagramSocket
				dataSocket = new DatagramSocket();
			} catch (SocketException e) {
				e.printStackTrace();
			}
		}

		// 获取可以下载的文件列表传送给客户端
		private void showFiles() {
			File files = new File("upload_download");
			File[] allFile = files.listFiles();// 获取所有文件
			StringBuffer message = new StringBuffer();
			for (File f : allFile) {
				if (f.isFile()) {
					message.append(f.getName());
					message.append('\n');
				}
			}
			// 构造响应数据包
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值