我有一個DHCP和幾臺PC的本地網絡。其中一個應該是我的服務器,並自動連接到所有其他(客戶端)。我的想法是這樣的: 首先,我在每個正在從服務器(SClient)監聽客戶端程序的客戶端(CServer)上創建一個服務器。當SClient連接到CServer時,SClient向CServer發送他的IP,所以他知道這個IP上會有服務器。然後,在嘗試IP範圍內的所有IP(例如192.168.1.xxx)之後,他啓動真實服務器,所有客戶端連接到已知的服務器IP。 但是,當我嘗試以下操作時,SClient在嘗試連接到192.168.1.0時僅在第一個IP處凍結。我怎樣才能定義一個超時或類似的東西讓SClient放棄不成功的連接並繼續使用192.168.1.1?創建新套接字時添加超時
import java.lang.*;
import java.io.*;
import java.net.*;
class SClient {
public SClient() {
for(int i = 120; i < 125; i++){
try{
InetAddress addr = InetAddress.getLocalHost();
String addrs = addr+"";
String ip = addrs.substring(addrs.indexOf("/")+1);
Socket s1 = new Socket("192.168.1." + i, 1254);
OutputStream s1out = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream (s1out);
dos.writeUTF(ip);
dos.close();
s1out.close();
s1.close();
}catch(IOException e){}
}
}
}
和
import java.lang.*;
import java.io.*;
import java.net.*;
class CServer {
public CServer() throws IOException{
ServerSocket s = new ServerSocket(1254);
while(true){
Socket s1=s.accept();
InputStream s1In = s1.getInputStream();
DataInputStream dis = new DataInputStream(s1In);
String st = new String (dis.readUTF());
System.out.println(st);
dis.close();
s1In.close();
s1.close();
}
}
}
這可能是因爲你是從192.168.1.0開始的。如果我沒有記錯,一個IP地址永遠不會以0結束,只是子網掩碼會。嘗試從1開始,看看它是否更好。如果這個IP不存在,它應該很快超時。 – 2012-03-02 00:07:03
在這種情況下,我開始於192.168.1.120,因爲我知道我有一個現有的IP在123,但它不會超時。 – 2012-03-02 13:31:07