如何检测到客户端socket是否与服务端serverSocket已连接 最近做了一个批量上传图书资源的swing,上传用到了socket,前几天在用此程序作批量上传的时候,服务端serverSocket没有启动,结果客户端这边还一直在运行着,结果服务器上一本图书也没有传上去。现在想做一个能检测服务端serverSocket是否已连接的检测程序,请问各位有谁了解这方面的socket操作的吗?急盼回复,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 socket.isClosed(); // 返回套接字是否关闭 客户端socket怎样来检测服务端serverSocket是否是开着,socket.isClosed(); // 返回套接字是否关闭上面那个方法不是 ServerSocket如果没有启动,客户端的Socket是连接不上的,如果Server端负责和客户端通讯的Socket断掉的话客户端的Socket会抛出异常 我不明白你的客户端怎么会一直等着呢?如果服务端没有启动,客户端的socket建立时就会报错除非你的服务端是在防火墙后面,而防火墙封闭了这个端口,那在socket创建的时候错误返回会慢一点,不过也不可能一直在那里等着呀 嗯,由于服务端的服务器因为某种原因关掉了,所以在那台服务器上开的ServerSocket服务也自然被荡掉了,客户端开的是swing界面,没看出来抛出的异常,上传图书的进度条一直都在继续着,上传的人还以为是一直在传着呢,现在是想能不能在上传之前先通过检测来得知服务端的serverSocket是否开着。来查看客户端出现的异常是判断服务端是否已连上的一种办法,我试想能不能通过程序来检测到服务端是否已连上,不知道能不能做。谢谢楼上对此贴的指点,继续请教中... 你的信息发送不成功时没有做异常处理,所以会出现这样的问题。当信息发送不成功时,Socket会报异常。 Socket的所有操作都应该try...catch...一下只要服务段出现你说的情况,那基本上来说都会抛出异常,捕获到就知道服务段出问题了不过如果Socket已经建立,那么服务段网线断开或者突然终止程序(非正常退出),客户端的scoket在通过OutputStream发送数据时是不会发现异常的,数据仍然被发送到了系统缓冲,直到缓冲满了,阻塞住。这种情况一般通过接受服务段回执来解决。比如你把文件拆分成一个一个的报文发送,每次发送完毕一个报文,就通过InputStream来接收回执(哪怕只是服务端返回接受成功的一个标志)。当然在这之前要先设置socket的超时时间,如果接收超时了,也说明服务端出问题了。不知道你说的是不是这个意思 你的程序一定是try{ ......}catch(Exception e){}//空语句 这样虽然出错了不抛任何异常。自己骗自己呗所以至少在catch语句里面使用JOptionPane类来提示链接出错。 服务端没开你的客户端也能运行,真是牛叉若服务端没开你的客户端的socket肯定没办法初始化,捕捉个异常处理一下啊 public void connect(){ try { sc = new Socket(host,port); /**/ }catch(ConnectException e){ System.out.println("服务器没有启动!"); } //提示您:服务器没有启动 catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void connect(){ try { sc = new Socket(host,port); /**/ }catch(ConnectException e){ System.out.println("服务器没有启动!"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 有关类的继承与接口实现同时存在的问题 Frame Java继续学习中遇到的困惑(进阶)。。。。 高手来吖!!!Java单态设计模式问题.. 有没有第3方包或者是其他的方法,将我写入的文件的内容加密,谢谢 用eclisps SWT打包成jar 失败 在win98下安装JDK时的自动设置 哪里有think in java里的源程序下载啊? 为什么不安装maven一样可以使用maven? 多线程时,BufferedInputStream.read(buf,0,length) 阻塞怎么办? 写了一个注册小程序,用Struts+DAO,在具体实现方法中出了点问题 \请问java中如何获得数据类型?
socket.isClosed(); // 返回套接字是否关闭
上面那个方法不是
来查看客户端出现的异常是判断服务端是否已连上的一种办法,我试想能不能通过程序来检测到服务端是否已连上,不知道能不能做。
谢谢楼上对此贴的指点,继续请教中...
只要服务段出现你说的情况,那基本上来说都会抛出异常,捕获到就知道服务段出问题了
不过如果Socket已经建立,那么服务段网线断开或者突然终止程序(非正常退出),客户端的scoket在通过OutputStream发送数据时是不会发现异常的,数据仍然被发送到了系统缓冲,直到缓冲满了,阻塞住。
这种情况一般通过接受服务段回执来解决。比如你把文件拆分成一个一个的报文发送,每次发送完毕一个报文,就通过InputStream来接收回执(哪怕只是服务端返回接受成功的一个标志)。当然在这之前要先设置socket的超时时间,如果接收超时了,也说明服务端出问题了。不知道你说的是不是这个意思
try
{
......
}
catch(Exception e)
{}//空语句
这样虽然出错了不抛任何异常。自己骗自己呗
所以至少在catch语句里面使用JOptionPane类来提示链接出错。
若服务端没开你的客户端的socket肯定没办法初始化,捕捉个异常处理一下啊
try {
sc = new Socket(host,port);
/**/
}catch(ConnectException e){
System.out.println("服务器没有启动!");
} //提示您:服务器没有启动
catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
sc = new Socket(host,port);
/**/
}catch(ConnectException e){
System.out.println("服务器没有启动!");
}
catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}