android下socket编程问题:服务器关闭时,客户端发送请求的异常处理

yyyay 2010-11-24 04:18:06
大侠们好!

我用socket分别创建了一个服务器和一个客户端。

当服务器程序运行时,客户端和服务器发送接收数据是OK的。

但是,如果服务器程序关闭以后,客户端仍然发送请求的话,会抛出一个IOException。但这个时间间隔很久,要三到四分钟才会抛出这个异常的。刚开始还以为是死机了呢!

我想在客户端做一个处理:如果服务器未开,要弹出一个提示框,然后结束当前程序。
请问怎么实现?




附创建客户端的部分代码:
Socket socket = new Socket("10.13.81.3",5000);

sendMsg(str);//这个是给服务器发送数据的接口
readMsg();//这个是服务器收到后 立即会发送数据给客户端,由客户端在这里接收数据

我就想在创建socket之后,判断是否connect,没有的话就弹出对话框,但是不成功
...全文
3000 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
choclover 2011-12-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gundumw100 的回复:]

这样是不是服务器一开始就关闭的情况下适用?
那假如服务器一开始是的开启,客服端连接正常,后来由于某种原因关闭了,这个时候再连服务器的时候客户端是否会超时IOException出现?

[/Quote]
这种情况下客户端再次读、写时会收到IOException,但是不是超时不好说。
gundumw100 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yyyay 的回复:]

同志们:问题解决了,结贴给分。

解决方法:
/// global variables
public Socket socket = null;
private InetSocketAddress isa = null;
private static final String HOST = "10.13.81.26";
private static final String POR……
[/Quote]

这样是不是服务器一开始就关闭的情况下适用?
那假如服务器一开始是的开启,客服端连接正常,后来由于某种原因关闭了,这个时候再连服务器的时候客户端是否会超时IOException出现?
JJ22EEEE 2011-03-08
  • 打赏
  • 举报
回复
写的很好 结贴的时候 还不忘把正确答案奉献出来 支持你 感谢你
yyyay 2010-12-22
  • 打赏
  • 举报
回复
同志们:问题解决了,结贴给分。

解决方法:
/// global variables
public Socket socket = null;
private InetSocketAddress isa = null;
private static final String HOST = "10.13.81.26";
private static final String PORT = 5000;
private static final String TIMEOUT = 100;

///connect to server
try
{
socket = new Socket();
isa = new InetSocketAddress(HOST,PORT);
socket.connect(isa,TIMEOUT);
}
catch(IOException e)
{
e.printStackTrace();
}
finnally
{
this.disconnectToServer();
}

///disconnect to server
try
{
if(socket != null)
{
socket.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}

之前链接socket直接用:
Socket socket = new Socket("10.13.81.26",5000);
socket.setTimeout(100);
这样,如果出现服务器端未开启时,即使设置了100ms超时时间,也会过很长时间才会捕捉到IOException

现在先定义isa,通过isa跟socket链接 可以解决上面的问题






yyyay 2010-11-30
  • 打赏
  • 举报
回复
试下 如果可以就不用贴代码了!

大家顶贴都有分哈!
yyyay 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 songshtao 的回复:]

啊 都结贴了 还想说 让你判断返回,有个函数忘了,你自己查下,返回参数是判断服务器是否和客户端是否建立连接的,以前在linux上开发,用这个判断服务器和客户端断开,比如QQ下线判断和聊天室里在线人数,下线状态判断
[/Quote]

没结贴啊!这个对我很有用呢!
yyyay 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 drsmart 的回复:]

你贴代码吧,连接过程代码都贴出来吧,我来测试下
[/Quote]
好,不过要久点(办公电脑没有USB权限,又不能上网的)
害朕的刁民 2010-11-29
  • 打赏
  • 举报
回复
啊 都结贴了 还想说 让你判断返回,有个函数忘了,你自己查下,返回参数是判断服务器是否和客户端是否建立连接的,以前在linux上开发,用这个判断服务器和客户端断开,比如QQ下线判断和聊天室里在线人数,下线状态判断
DrSmart 2010-11-25
  • 打赏
  • 举报
回复
你贴代码吧,连接过程代码都贴出来吧,我来测试下
yyyay 2010-11-25
  • 打赏
  • 举报
回复
lz,你太心急了

我肯定是问题还没解决才拖着没结贴嘛!等问题解决了 会给你分啦!

我有试过 设置timeout时间,没有成功呢!还是跟以前一样死在那里的
DrSmart 2010-11-24
  • 打赏
  • 举报
回复
试完了,结贴啊,最近android区结贴的人太少了,嗨,怎么不像vc区,强制结贴啊
yyyay 2010-11-24
  • 打赏
  • 举报
回复
哇,二位,真是太感动了!马上尝试!
dryZeng 2010-11-24
  • 打赏
  • 举报
回复
这应该是Socket连接超时的异常,你也可以设置其超时时间setTimeOut

写个异常捕获,如果是超时异常,那么在处理异常代码段中写你要弹出的对话框。
DrSmart 2010-11-24
  • 打赏
  • 举报
回复
如果服务器未开,要弹出一个提示框,然后结束当前程序

这种情况,你可以你设置下,连接超时,socket处理必须开线程,推荐你使用nio,可以参考 Android开发进阶之NIO非阻塞包系列文章,学习下

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧