DHCP와 몇 대의 PC가있는 로컬 네트워크가 있습니다. 이 중 하나는 내 서버이어야하며 다른 모든 클라이언트 (클라이언트)와 자동으로 연결되어야합니다. 내 생각은 이것이었다 : 먼저 서버 (SClient)에서 클라이언트 programm를 수신하는 모든 클라이언트 (CServer)에 서버를 만듭니다. SClient가 CServer에 연결되면 SClient는 CServer에게 자신의 IP를 전송하므로이 IP에 서버가 있다는 것을 알게됩니다. 그런 다음 IP 범위 (예 : 192.168.1.xxx)에있는 모든 IP를 시도한 후 실제 서버를 시작하고 모든 클라이언트가 알려진 서버 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로가는 경우 상당히 빨리 시간을 초과해야합니다. 이 경우 –
이 192.168.1.120으로 시작했는데, 123에 존재하는 IP가 있다는 것을 알고 있기 때문에 시간이 초과되지 않습니다. –