免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6510 | 回复: 9
打印 上一主题 下一主题

怎么判断在socket发包过程中对方没有收到包?(请高手指教)   [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-19 14:14 |只看该作者 |倒序浏览
条件是对方不返回任何数据..........

论坛徽章:
0
2 [报告]
发表于 2003-05-19 14:15 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

具体情况如下:

我起一个监听,对方有包数据过来我处理并返回数据包,对方收到包后主动断掉Socket,还有一种是对方自己不断掉Socket,由我发完包后自己断掉Socket。现在有一种情况是如果与对方通讯异常,对方收不到我的返回包,我怎么判断这种情况.............
我测试程序模拟对方的发包是分三种情况:(前两种正常情况)1.发送数据包,当接受到返回包Close Socket 2.发送数据包,直到对方(指我的监听)Close Socket才接收返回数据包 (第三种通讯出错不能收到返回包)3.发送数据包,然后Close掉Socket.............

我的问题是我不知道如何区分:1和3两种情况下的Socket的状态,也不能扑捉到这两种情况不同的异常

论坛徽章:
0
3 [报告]
发表于 2003-05-19 14:16 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

能不能在向对方发包之前检测出对方的Socket的已经Close?
我想在发包前测试Socket的连接状态(如下),但第三种情况异常没有抛出?!!!
if(sckt.isClosed()){
    throw new IOException("对方Socket 已经Closed!";
}

论坛徽章:
0
4 [报告]
发表于 2003-05-19 14:16 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

在C语言里可以根据send的返回值来判断对方是否接收到数据,如
if(send ( sock, send_buf,strlen(send_buf) , 0 ) < 0){
        printf( "send data to socket error!\n";      
}
java 难道没有一点办法可以知道对方有没有接到数据吗?

论坛徽章:
0
5 [报告]
发表于 2003-05-20 09:48 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

socket 里面是自带了校验的,如果没有收到异常,对方一定是收到了这个包。

论坛徽章:
0
6 [报告]
发表于 2003-05-20 13:34 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

感谢cinc的回答

现在是对方主动Close Socket和网络异常(我通过在测试程序中发完包后直接Close Socket不再等待返回包的方式来模拟网络异常的)抛出的错误是一样的:
java.net.SocketException: Socket is closed
怎么能区分对方主动Close Socket和网络异常这两种情况.......我的程序要对网络异常的情况要做处理,所以必须区分这两种情况........

请问你,你认为该如何取到Socket异常

论坛徽章:
0
7 [报告]
发表于 2003-05-22 11:33 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

try{
   send something to client
}catch(Socket Exception){
  // 如果没有异常,已经发成功了
}

这里再检查是否关闭了链接

论坛徽章:
0
8 [报告]
发表于 2003-05-22 12:23 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

cinc,我试了,不行.......

实际上我测试程序模拟:1.发送数据包,当接受到返回包Close Socket
3.发送数据包,然后Close掉Socket(这是模拟通讯异常,如突然网络中断)

这两种情况都会有java.net.SocketException: Socket is closed
而第一种情况下我的测试程序是可以接到我的返回包的,第二种情况当然是接不到返回包的.......
并不像你所说的“如果没有异常,已经发成功了“,因为即使有异常,也发送成功了(第一种情况)

论坛徽章:
0
9 [报告]
发表于 2003-06-06 12:56 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

up

论坛徽章:
0
10 [报告]
发表于 2003-06-09 14:55 |只看该作者

怎么判断在socket发包过程中对方没有收到包?(请高手指教)  

原帖由 "maskor" 发表:
cinc,我试了,不行.......

实际上我测试程序模拟:1.发送数据包,当接受到返回包Close Socket
3.发送数据包,然后Close掉Socket(这是模拟通讯异常,如突然网络中断)

这两种情况都会有java.net.SocketExcep..........
   

我觉得你这种模拟方法(3)有问题,如果是你自己close,这不是异常。
你如果要模拟异常的话,你应在你建立连接之后,发送数据之前把网线拨掉。这就是一个异常了。要实现也不难,你在建立连接之后,给个提示,然后等个几秒钟让你拨网线。:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP