加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 创建新Socket时添加超时

发布时间:2020-12-14 23:46:40 所属栏目:Java 来源:网络整理
导读:我有一个带DHCP的本地网络和几台PC.其中一个应该是我的服务器并自动连接到所有其他(客户端).我的想法是这样的: 首先,我在每个从服务器(SClient)监听客户端程序的客户端(CServer)上创建一个服务器.当SClient连接到CServer时,SClient向CServer发送他的IP,因此
我有一个带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();
    }
}

}

解决方法

我找到了解决问题的方法.它只是初始化Socket而不是
Socket s1 = new Socket("192.168.1." + i,1254);

但随着

Socket s1 = new Socket();
s1.setSoTimeout(200);
s1.connect(new InetSocketAddress("192.168.1." + i,1254),200);

不管怎么说,还是要谢谢你!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读