udp文件服务器 Java,UDP协议实现二进制文件传输(java)(8页)-原创力文档

1.UDP概念

UDP 是User Datagram Protocol的简称, 中文名是用户 数据包协议,是 OSI 参考模型中一种无连接的 传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。

2.文件传输流程

2.1在此使用UDP协议传送文件的程序中,先在服务器端设定监听端口号(3666),在接收客户端发来的请求之前一直处于阻塞状态;在客户端则从本地读取二进制文件并封装成数据报,并发送到相应的服务器端(ip:127.0.0.1,端口:3666);当服务器端接收到客户端发来的请求后,则对数据进行处理,即读取并保存数据,然后返回操作后的信息到客户端;当客户端接收到服务器端的信息后,则输出服务器端返回的信息,到此时就完成了客户端的请求和服务器端的应答;最后关闭DatagramSocket。

3.程序流程图

Receive()

Receive()

接收到来自客户端的数据

writeFile()

Socket()

readFile()

sendTo()

Receive()

sendTo()

客户端

服务器端

Y

N

显示返回的信息

Close()

Socket()

数据应答

发送文件

4.程序部分源码

4.1 服务器端源码

public class Server extends Thread {

DatagramSocket ds = null;

DatagramPacket dp = null;

File file = null;

@Override

public void run() {

// TODO Auto-generated method stub

try {

// 设置端口为3666

ds = new DatagramSocket(3666);

while (true) {

byte[] buf = new byte[1024 * 64];

// 用于接收长度为1024的数据包

dp = new DatagramPacket(buf, buf.length);

// 从此套接字接收数据报包,此方法在接收到数据之前处于阻塞状态

ds.receive(dp);

// 保存接收文件,文件名取系统当前时间

long temp = System.currentTimeMillis();

this.saveFile(dp, temp + "");

// 为使反馈过程效果明显,线程休眠2秒后发送回复信息

Thread.sleep(2000);

String message = "server has received it.";

DatagramPacket packet = new DatagramPacket(message.getBytes(),

message.length(), InetAddress.getLocalHost(), 6666);

// 发送回复数据包

ds.send(packet);

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 保存接收到的文件

*

* @param dp

* @param filePath 保存文件所在的路径

* @throws IOException

*/

private void saveFile(DatagramPacket dp, String filePath)

throws IOException {

FileOutputStream fileOutputStream = new FileOutputStream(new File(

filePath));

fileOutputStream.write(dp.getData(), 0, dp.getData().length);

fileOutputStream.close();

}

4.2客户端源码

public class Client {

private DatagramSocket ds = null;

private DatagramPacket dp = null;

/**

* 传输文件

* @param filePath 文件所在路径

*/

public void TransmitFile(String filePath) {

try {

// 从本地读取文件

byte[] data = this.readFile(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值