java实现TCP与UDP混合传输文件总结
最近在用java写基于UDP传输文件的网络,遇到了很多问题,也参考了很多人编写的程序,通过 自己的整理和设计,终于写完了自己程序,现在将在编程中遇到的问题总结一下。
发送方:
首先发送方需要发送文件的一些属性给文件接收方,如文件的名称,文件的大小等,让文件接收方判断是否接受文件,由于这部分内容比较重要,不能出现丢包的现象,所以采用TCP/IP协议来传输文件,而在文件传输的时候,我们采用UDP协议传输,这样能让文件传输得更快。先看一下发送方代码。
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.TimeUnit;
import javax.swing.*;
public class FileClient extends JFrame {
FileDialog fd1 = null;
DatagramSocket ds = null;
DatagramPacket sendDp = null;
static int sendDataLen = 10240;
public byte[] sendBuff = new byte[sendDataLen];
public InetAddress udpIP = null;
static int udpPort = 10000;
static int tcpPort = 9999;
public static void main(String[] args) {
// TODO Auto-generated method stub
FileClient fc = new FileClient();
fc.fileSender();
}
public void fileSender() {
try {
// 打开windows的文件对话框
fd1 = new FileDialog(this, "请选择需要打开的文件", FileDialog.LOAD);
fd1.setVisible(true);
String filePath = fd1.getDirectory() + fd1.getFile();
String location = filePath.replaceAll("\\\\", "/");
System.out.println("绝对文件目录+文件名" + filePath);
System.out.println("绝对文件目录+文件名" + location);
DataInputStream dis = new DataInputStream(new BufferedInputStream(
new FileInputStream(location)));
// 单位是字节
int fileLen = dis.availab