tcp
package org.tcp;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class FileSender {
private ServerSocket ss = null;
public FileSender() {
}
public void startSend(String filePath, int port) {
// socket输出流
DataOutputStream os = null;
// 文件输入流
DataInputStream is = null;
// 建立socket连接
Socket socket = null;
try {
// 选择进行传输的文件
File file = new File(filePath);
// 建立socket监听
ss = new ServerSocket(port);
socket = ss.accept();
os = new DataOutputStream(socket.getOutputStream());
// 将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,
// 具体可以参见Think In Java 4th里有现成的代码。
os.writeUTF(file.getName());
os.flush();
os.writeLong((long) file.length());
os.flush();
is = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath)));
// 缓冲区大小
int bufferSize = 8192;
// 缓冲区
byte[] buf = new byte[bufferSize];
// 传输文件
while (true) {
int read = 0;
if (is != null) {
read = is.read(buf);
}
if (read == -1) {
break;
}
os.write(buf, 0, read);
}
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭所有连接
try {
if (os != null)
os.close();
} catch (IOException e) {
}
try {
if (is != null)
is.close();
} catch (IOException e) {
}
try {
if (socket != null)
socket.close();
} catch (IOException e) {
}
try {
if (ss != null)
ss.close();
} catch (IOException e) {
}
}
}
public static void main(String[] args) {
new FileSender().startSend("E:\\Sky.zip", 8821);
}
}
package org.tcp;
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class FileIncepter { public FileIncepter() { } public void getFile(String savePath, String ip, int port) { // 建立socket连接 Socket socket = null; try { socket = new Socket(ip, port); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } // 建立socket输入流 DataInputStream inputStream = null; try { inputStream = new DataInputStream(new BufferedInputStream(socket .getInputStream())); } catch (IOException e1) { e1.printStackTrace(); } try { // 缓冲区大小 int bufferSize = 8192; // 缓冲区 byte[] buf = new byte[bufferSize]; int passedlen = 0; long len = 0; // 获取文件名称 savePath += inputStream.readUTF(); DataOutputStream fileOut = new DataOutputStream( new BufferedOutputStream(new BufferedOutputStream( new FileOutputStream(savePath)))); // 获取文件长度 len = inputStream.readLong(); System.out.println("文件的长度为:" + len + " KB"); System.out.println("开始接收文件!"); // 获取文件 while (true) { int read = 0; if (inputStream != null) { read = inputStream.read(buf); } passedlen += read; if (read == -1) { break; } System.out.println("文件接收了" + (passedlen * 100 / len) + "%"); fileOut.write(buf, 0, read); } System.out.println("接收完成,文件存为" + savePath); fileOut.close(); } catch (Exception e) { e.printStackTrace(); return; } } public static void main(String[] args) { new FileIncepter().getFile("F:\\", "localhost", 8821); } }
udp的:package org.udp; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.Inet4Address; import java.util.Date; import java.util.concurrent.TimeUnit; public class Sender { public static DatagramSocket dataSocket; public static final int PORT=7; public static byte[] sendDataByte; public static DatagramPacket dataPacket; public static void main(String[] args) throws IOException, InterruptedException{ String filePath="D:\\Sky.zip"; DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); dataSocket = new DatagramSocket(PORT+1); sendDataByte = new byte[1024]; int read=0; long a=new Date().getTime(); while(true){ if (fis != null) { read = fis.read(sendDataByte); } if (read == -1) { System.out.println(new Date().getTime()-a); break; } dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,(Inet4Address) Inet4Address.getByName("localhost"), PORT); dataSocket.send(dataPacket); TimeUnit.MICROSECONDS.sleep(1);//限制传输速度 } } }
package org.udp; import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class Incepter { public static DatagramSocket dataSocket; public static final int PORT=7; public static byte[] receiveByte; public static DatagramPacket dataPacket; public static void main(String[] args) throws IOException{ dataSocket = new DatagramSocket(PORT); DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream("E:\\Sky.zip")))); int i = 0; while (i == 0)// 无数据,则循环 { receiveByte = new byte[1024]; dataPacket = new DatagramPacket(receiveByte, receiveByte.length); dataSocket.receive(dataPacket); i = dataPacket.getLength(); // 接收数据 if (i > 0) { // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 fileOut.write(receiveByte,0,i); fileOut.flush(); i = 0;// 循环接收 } } } }