我正在尝试测试多台计算机负载下的SOCKS代理。我的代码大纲与
类似1和2在相同的功能中执行。
private static void baseline() {
Download withProxy = new Download(socksPort, targetFile);
Download withoutProxy = new Download(true, socksPort, targetFile); //The true argument just indicates not to use the proxy.
try { //Come to think of it, I could just call run() directly here since this part is meant to be done serially.
withProxy.start();
withProxy.join();
withoutProxy.start();
withoutProxy.join();
//Some code for getting the times goes here.
} catch (Exception e) {
System.out.println("Couldn't get baseline.");
e.printStackTrace();
}
}
下载对象继承自Thread。大部分工作都是在run()方法中完成的,如下所示:
public void run() {
try {
URL url = new URL("http://" + targetFile);
URLConnection urconn = null;
if (baseline) {
urconn = url.openConnection(Proxy.NO_PROXY);
} else {
Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxyAddr);
urconn = url.openConnection(proxy);
}
InputStreamReader isr = new InputStreamReader(urconn.getInputStream());
System.out.println("Thread " + id + " is downloading.");
long startTime = System.currentTimeMillis();
char[] buf = new char[64];
while (isr.read(buf) != -1) {
;
}
long endTime = System.currentTimeMillis();
isr.close();
System.out.println("Thread " + id + " has completed.");
delta = (endTime - startTime);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
问题在于,当我调用基线函数时,它总是使用第一个代理选择 - 如果我先运行withproxy线程,则无代理线程将使用代理。如果我首先运行withoutproxy,则withproxy忽略代理。真正奇怪的是,稍后当我尝试通过代理与多个客户端连接时,基线连接的工作方式无关紧要 - 如果基线连接没有使用代理,多个客户端连接仍然可以。
我在这里缺少什么?
由于
答案 0 :(得分:1)
我设法修复它 - 无论出于何种原因,后续调用url.openconnection()之间的时间都有所不同。在每个start()之间调用Thread.sleep(10000)。