要求:

基于UDP协议实现文件下载

发送方–请求–接收方发送文件–发送方接收文件


代码:


发送方:

package Homework1;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; public class Send {
public static void main(String[] args){
System.out.println("发送者启动"); DatagramSocket socket=null;
FileOutputStream fos=null;
try {
//1.发送请求
socket=new DatagramSocket();
String string="请求下载文件...";
DatagramPacket packet=new DatagramPacket(string.getBytes(), string.getBytes().length, InetAddress.getLocalHost(), 6635);
socket.send(packet); //2.创建file对象,以及文件输出流
File file=new File("b.txt");
fos=new FileOutputStream(file); //3.接收文件
byte[] buf=new byte[1024];
while(true){
DatagramPacket p=new DatagramPacket(buf, buf.length);
socket.receive(p);
String string2=new String(p.getData(), 0, p.getLength()); //4.根据接收方发来的数据,判断文件是否传输完毕
if(string2.equals("发送完毕")){
break;
}
fos.write(string2.getBytes());
fos.flush();
} } catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(socket!=null){
socket.close();
}
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
}

接收方:

package Homework1;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class Receive {
public static void main(String[] args){
System.out.println("接收者启动"); DatagramSocket socket=null;
FileInputStream fis=null;
try {
//1.创建Datagramsocket对象,相当于TCP中的Socket
socket=new DatagramSocket(6635); //2.创建Datagrampacket对象,用于装数据
byte[] buf=new byte[1024];
DatagramPacket packet=new DatagramPacket(buf, buf.length);
//3.接收数据,收到发送方请求“下载文件”
socket.receive(packet);
System.out.println(new String(packet.getData(),0,packet.getLength())); //4.发送文件给--发送方
File file=new File("a.txt");//要给发送方的文件
fis=new FileInputStream(file);
byte[] b=new byte[10];
int count=0;
while((count=fis.read(b))!=-1){
DatagramPacket p=new DatagramPacket(b, count,packet.getAddress(),packet.getPort());
socket.send(p);
} //5.文件发送完后,给--发送方回复一句话
String string="发送完毕";
packet=new DatagramPacket(string.getBytes(), string.getBytes().length,packet.getAddress(),packet.getPort());
socket.send(packet);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(socket!=null){
socket.close();
}
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

运行结果:

发送方:

接收方:

网络编程应用:基于UDP协议【实现文件下载】--练习的更多相关文章

  1. 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

    目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

  2. python 之 网络编程(基于UDP协议的套接字通信)

    8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

  3. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  4. 网络编程4之UDP协议

    一.定义 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种[无 ...

  5. Java网络编程二--基于UDP的编程

    DatagramSocket对象为基于UDP协议的Socket 构造器提供可以选择性绑定到指定端口和ip 创建完对象后调用:receive(DatagramPacket p) send(Dategra ...

  6. TCP/IP网络编程之基于UDP的服务端/客户端

    理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...

  7. python 之 网络编程(基于TCP协议的套接字通信操作)

    第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...

  8. TCPIP协议编程:基于UDP协议的局域网聊天工具的研发

    任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...

  9. python 网络编程 tcp和udp 协议

    1. 网络通信协议 osi七层,tcp\ip五层 tcp\ip五层 arp协议:通过IP地址找到mac地址 2.tcp和udp的区别 tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是 ...

  10. Linux网络编程:基于UDP的程序开发回顾篇

    基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下:   对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了 ...

随机推荐

  1. nodejs + nginx + ECS阿里云服务器环境设置

    nodejs + nginx + ECS阿里云服务器环境设置 部署 nodejs ECS 基于 CentOS7.2 详细步骤:click 部署 nginx 安装 添加Nginx软件库: [root@l ...

  2. 读书笔记 effective c++ Item 51 实现new和delete的时候要遵守约定

    Item 50中解释了在什么情况下你可能想实现自己版本的operator new和operator delete,但是没有解释当你实现的时候需要遵守的约定.遵守这些规则并不是很困难,但是它们其中有一些 ...

  3. cmd中添加snmpd被控

    在cmd中添加snmpd被控,减少手动操作步骤. net stop sharedaccess reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\s ...

  4. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化

    本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...

  5. 【代码学习】MYSQL数据库的常见操作

    ---恢复内容开始--- ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与 ...

  6. __read_mostly变量含义

     1. 定义 __read_mostly原语将定义的变量为存放在.data.read_mostly段中,原型在include/asm/cache.h 中定义: #define __read_mos ...

  7. systemtap原理及使用

    SystemTap的架构 SystemTap用于检查运行的内核的两种方法是 Kprobes和 返回探针.但是理解任何内核的最关键要素是内核的映射,它提供符号信息(比如函数.变量以及它们的地址).有了内 ...

  8. Python中使用Mysql(安装篇)

    准备工作 import MySQLdb Linux系统自带了Python,但并不是都有这个包,至少我每次拿到一台全新的服务器时候,都发现没有装这个包. 这个东西的下载地址是 http://source ...

  9. 'k1': 大于66的所有值, 'k2': 小于66的所有值

    #!/usr/bin/env python # -*- coding: utf-8 -*- #有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值 ...

  10. [转载]PHP文件解压代码

    来自开源中国: