工具类
package Ntework;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class UdpFileUtils {
// public static void main(String[] args) {
// byte[]s=dFile("abc.png");
// xFile(s,"abcd.png");
// }
//读文件->字符数组
static byte[] dFile(String srcPath){
File src=new File(srcPath);
InputStream in=null;
ByteArrayOutputStream byteArray=null;
try{
in=new FileInputStream(src);
byteArray=new ByteArrayOutputStream();
byte[] temp=new byte[1024];
int len=0;
while((len=in.read(temp))!=-1){
byteArray.write(temp, 0, len);
}
byteArray.flush();
return byteArray.toByteArray();
}catch(IOException e){
e.printStackTrace();
}finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
//读字符数组->写文件
static void xFile(byte[] src,String srcPath){
File newsrc=new File(srcPath);
InputStream in=null;
OutputStream out=null;
try{
in=new ByteArrayInputStream(src);
out=new FileOutputStream(newsrc);
byte[] temp=new byte[10];
int len=0;
while((len=in.read(temp))!=-1){
out.write(temp, 0, len);
}
out.flush();
}catch(IOException e){
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
接收端
package Ntework;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
*
* 文件:接收端
* Address already in user:Cannot bind 同一个协议下端口不允许冲突
* 1.使用DatagramSocket创建接收端,指定端口
* 2.准备容器封装成DatagramPacket包裹
* 3.阻塞式接收包裹receive(DatagramPacket p)
* 4.分析数据byte[] getData()/getLength()
* 5.释放资源
* @author pmc
*
*/
public class UdpFileServer {
public static void main(String[] args) throws IOException{
System.out.println("接收方启动中...");
//使用DatagramSocket指定端口创建发送端
DatagramSocket server=new DatagramSocket(9990);
//准备容器 封装成DatagramPacket包裹
byte[] container=new byte[1024*60];
DatagramPacket packet=new DatagramPacket(container,0,container.length);
//阻塞式接收包裹receive(DatagramPacket p)
server.receive(packet);
//分析数据 byte[] getData()/getLength()
byte[] datas=packet.getData();
int len=packet.getLength();
UdpFileUtils.xFile(datas, "xxxx.png");
//释放资源
server.close();
}
}
发送端
package Ntework;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
*
* 文件:发送端
* 1.使用DatagramSocket创建发送端,指定端口
* 2.准备数据转成字节数组
* 3.分装成DatagramPacket包裹,需要指定目的地
* 4.发送包裹send(DatagramPacket p)
* 5.释放资源
*
* 同一个协议下端口不允许冲突
* @author pmc
*
*/
public class UdpFileClient {
public static void main(String[] args) throws IOException{
System.out.println("发送方启动中...");
//使用DatagramSocket指定端口创建发送端
DatagramSocket client=new DatagramSocket(8881);
//准备数据转字节数组
byte[] datas=UdpFileUtils.dFile("abc.png");
//封装成DatagramPacket包裹,需要指定目的地
DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9990));
//发送包裹send(DatagramPacket p)
client.send(packet);
//释放资源
client.close();
}
}