我有一个带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?
首先,我在每个从服务器(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(); } }
}