我是靠谱客的博主 唠叨心锁,最近开发中收集的这篇文章主要介绍java网络编程-利用datagramsocket和datagrampacket实现一台机器向另一台机器传文件,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
编写程序,利用数据包(Datagram)将一个文件从一台机器传到另一台机器上。
【服务器端】
1) 服务器启动,等待客户想服务器发送数据包
2) 服务器收到客户端发来的数据包,确认用户端的存在并于用户端建立连接
3) 读取文件路径和文件名,打包发送
4) 将文件读入到缓冲流,再按字节数组读,将字节数组打包发送。
5) 数据读到流末端时,发送数据包,程序结束。
【客户端】
1) 客户端启动,并向服务器端发送一个数据包
2) 接收到服务器发来的文件路径和文件名的数据包,以此创建一个新文件
3) 设置循环,接收服务器发来的数据包,将包的内容按字节写入到已创建的文件中。
用setsotimeout设置超时即停,等待一定时间,若为接收到服务器的数据包,则程序退出。【注】1. 调试过程中,两台机器要链接到同一局域网 2.机器的虚拟机网卡,猎豹wifi等能连接网络的统统关闭和禁用
[服务器端代码]
import java.io.*;
import java.net.*;
public class thi4server {
public static void main(String[] args) throws IOException {
System.out.println("Server Start Working!");
int portreceive = 1234;
int portsend = 1234;
byte[] data = new byte[1024];
DatagramSocket filereceive = new DatagramSocket(portreceive);
InetAddress address = InetAddress.getByName("localhost");//客户端IP
DatagramPacket packet = new DatagramPacket(data, data.length);
filereceive.receive(packet);// 此方法在接收到数据报之前会一直阻塞
System.out.println("Server Connected With Client, Start TransForm File!");
String filename = "e:\ForTransformTest.txt";
File file = new File(filename);
BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
// 发送文件名和路径
DatagramSocket filesend = new DatagramSocket();
DatagramPacket packet2 = new DatagramPacket(filename.getBytes(), filename.getBytes().length,
packet.getAddress(), portsend);
filesend.connect(address, portsend);//可能会有用
filesend.send(packet2);
// 2.从缓冲流中按字节读取文件,打包发送
byte[] data2 = new byte[1024];
while (br.read(data2) != -1) {
DatagramPacket packet3 = new DatagramPacket(data2, data2.length, packet.getAddress(), portsend);
filesend.send(packet3);
}
System.out.println("Done!");
filesend.close();
}
}
[客户端代码]
import java.io.*;
import java.net.*;
public class thi4client {
public static void main(String[] args) throws IOException {
try {
InetAddress address = InetAddress.getByName("localhost");//localhost为服务器IP
int portsend = 1234;
int portreceive = 1234;
byte[] data = "hello".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, address, portsend);
DatagramSocket filesend = new DatagramSocket();
filesend.send(packet);
DatagramSocket filerecieve = new DatagramSocket(portreceive);
byte[] data2 = new byte[1024];
DatagramPacket packetfilename = new DatagramPacket(data2, data2.length);
filerecieve.receive(packetfilename);
System.out.println("Start file from server!");
String filename = new String(data2, 0, packetfilename.getLength());
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filename));
byte[] data3 = new byte[4096];
DatagramPacket packetfilecontain = new DatagramPacket(data3, data3.length);
try {
while (true) {
filerecieve.setSoTimeout(1000 * 2);
filerecieve.receive(packetfilecontain);
String filecontain = new String(data3, 0, packetfilecontain.getLength());
osw.write(filecontain);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Done");
osw.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
最后
以上就是唠叨心锁为你收集整理的java网络编程-利用datagramsocket和datagrampacket实现一台机器向另一台机器传文件的全部内容,希望文章能够帮你解决java网络编程-利用datagramsocket和datagrampacket实现一台机器向另一台机器传文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复