to javamap:你的意思是说,win2000发现这个数据报的目的主机上没有程序准备接收它的话,就返回 一个错误标志给我的应用程序,而java把它解释成一个exception,是吗?实际上throw 出exception后,这个socket还是有效的,还能继续用。那么我怎么在收到 一个IOException后,在程序里判断是这个原因引起的,还是确实是网络出故障而引起的呢?
找到了一点原因。根据udp协议,目的主机在收到udp包时,发现没有进程在监听端口的话,会向包发送者 发送一个“目的端口不可到达”的icmp包,我程序中的Exception就是由该包引起的。但为什么在win2000上有此问题,而NT, HP Unix, Solaris(我今天又在Solaris上测了 我的程序)上都没有此问题?答案继续寻找中。
So I said K2000 was doing a good job.
又仔细看了一遍Richard Stevens的《UNIX 网络编程》。 对于已连接的udp socket,操作系统内核会把“端口不可到达”的错误消息发送给应用程序; 对无连接的udp socket,则操作系统不会发给应用程序。仔细想了一想,觉得还是这种方式比较好,所以我的意见和javamap正好相反,win2000 was doing a not very good job.
一个错误标志给我的应用程序,而java把它解释成一个exception,是吗?实际上throw 出exception后,这个socket还是有效的,还能继续用。那么我怎么在收到
一个IOException后,在程序里判断是这个原因引起的,还是确实是网络出故障而引起的呢?
发送一个“目的端口不可到达”的icmp包,我程序中的Exception就是由该包引起的。但为什么在win2000上有此问题,而NT, HP Unix, Solaris(我今天又在Solaris上测了
我的程序)上都没有此问题?答案继续寻找中。
对于已连接的udp socket,操作系统内核会把“端口不可到达”的错误消息发送给应用程序;
对无连接的udp socket,则操作系统不会发给应用程序。仔细想了一想,觉得还是这种方式比较好,所以我的意见和javamap正好相反,win2000 was
doing a not very good job.
本来,如果好好讨论一下这个问题的话,不但对java的语言学习有帮助,
对windows和unix下的网络编程知识更是大有帮助。可惜这么多人就喜欢
纠缠在一些开发工具、界面等问题上面。很多很浅显的问题问来问去干
什么呢?你在问之前经过仔细的探索了吗?还是脚踏实地,多看看书,多做做实验吧!