package thread;
import bean.Property;
import bean.Query;
import socket.TCPReceiver;
import socket.UDPReceiver;
import socket.UDPSender;
import util.Config;
import util.IpAddr;
import java.util.Scanner;
public class FileSearch implements Runnable {
private boolean flag;
public FileSearch() {
this.flag = true;
}
@Override
public void run() {
while (this.flag) {
System.out.println("Please Enter the Filename You Want to Search:");
Scanner scanner = new Scanner(System.in);
String filename = scanner.next();
System.out.println("Start to search " + filename);
//SYN 请求体
Query synQuery = new Query();
synQuery.setFromIP(IpAddr.getLocalIpAddr());
synQuery.setFromPort(0);
synQuery.setToIP(Config.BROADCAST_IP);
synQuery.setToPort(Config.SEARCH_FILE_SYN_PORT);
synQuery.setFilename(filename);
//ACK 接收体
Query ackQuery = new Query();
ackQuery.setToPort(Config.SEARCH_FILE_ACK_PORT);
int search_times = Integer.parseInt(Property.getProperty("search_times"));
for (int i = 0; i < search_times; i++) {
new UDPSender().send(synQuery, 3);
System.out.println("send SYN " + (i + 1) + " time : " + synQuery);
new UDPReceiver().receive(ackQuery, Integer.parseInt(Property.getProperty("udp_timeout")));
if (ackQuery.getFilename() != null && ackQuery.getFilename().equals(filename)) {
System.out.println("receive ACK: " + ackQuery);
break;
}
}
if (ackQuery.getFilename() == null) {
System.out.println("Can't find file: " + filename);
continue;
}
// 创建接收文件的TCP服务器
TCPReceiver tcpReceiver = new TCPReceiver();
// TCP连接请求体
Query tcpQuery = new Query();
tcpQuery.setFromIP(IpAddr.getLocalIpAddr());
tcpQuery.setFromPort(tcpReceiver.getPort());
tcpQuery.setToIP(ackQuery.getFromIP());
tcpQuery.setToPort(Config.TCP_CONNECT_PORT);
tcpQuery.setFilename(filename);
int tcp_connect_times = Integer.parseInt(Property.getProperty("tcp_connect_times"));
for (int i = 0; i < tcp_connect_times; i++) {
new UDPSender().send(tcpQuery, 3);
boolean isSuccess = tcpReceiver.receive(tcpQuery, Integer.parseInt(Property.getProperty("tcp_timeout")));
if (isSuccess) {
break;
}
}
}
}
}
Strawssberry
- 粉丝: 1848
- 资源: 1189
会员权益专享
最新资源
- vue实现表格在线绘制编辑插件(附源码).rar
- Jcseg+Java中文分词器
- 微软语音合成工具+基于Electron + Vue + ElementPlus + Vite 构建并能将文字转换为语音 MP3
- 芯旺微 chipon 型号KF32A156的flash驱动flash driver放置在ram的操作方式介绍
- 【计算机专业PHP-毕业设计60套之】php+mysql社区交流系统(毕业论文+封面目录+系统+说明书)
- Cursor Setup 0.1.10-x64.exe
- 用Pytorch实现MNIST数据集的手写数字识别介绍
- 基于pytorch搭建CNN实现手写数字识别
- 64位RDP8.1补丁集合
- STM32+ESP01s通过MQTT连接OneNET上传DHT11温湿度数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


