📄 client.java
字号:
import java.io.FileInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class DataStruct {
// 文件的id,十位,多文件同時傳送時用來區分不同的文件
public String fileId;
// 包的序號
public int index;
// 包中有效數據的長度
public int len;
// 包
public byte[] data;
// 解析包內容
public DataStruct(byte[] data) {
fileId = new String(data, 0, 10);
index = (data[10] & 0x000000FF) | (data[11] << 8 & 0x0000FF00)
| (data[12] << 16 & 0x00FF0000) | data[13] << 24 & 0xFF000000;
len = (data[14] & 0x000000FF) | (data[15] << 8 & 0x0000FF00)
| (data[16] << 16 & 0x00FF0000) | data[17] << 24 & 0xFF000000;
this.data = data;
}
}
////Client:
////----------------------------------------------------------------------------
public class Client extends Thread {
public void run() {
try {
DatagramSocket reciveSocket = new DatagramSocket();
byte[] buf = new byte[50 * 1024];
DatagramPacket dp;
// 這裡寫死了處理一個文件
FileInputStream fis = new FileInputStream("d:/1.bmp");
int readlen;
int index = 0;
// 主機名
InetAddress addr = InetAddress.getByName("localhost");
while ((readlen = fis.read(buf, 18, 50 * 1024 - 18)) > 0) {
index++;
// 包的序號
buf[10] = (byte) (index & 0xFF);
buf[11] = (byte) (index >>> 8 & 0xFF);
buf[12] = (byte) (index >>> 16 & 0xFF);
buf[13] = (byte) (index >>> 24 & 0xFF);
// 包中有效數據的長度
buf[14] = (byte) (readlen & 0xFF);
buf[15] = (byte) (readlen >>> 8 & 0xFF);
buf[16] = (byte) (readlen >>> 16 & 0xFF);
buf[17] = (byte) (readlen >>> 24 & 0xFF);
dp = new DatagramPacket(buf, 50 * 1024, addr, 7774);
// 發送包
reciveSocket.send(dp);
sleep(5);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread thread = new Client();
thread.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -