To me, the exception thrown is right. It is not a bug. The other OS don't throw the exception because they don't do a good job.

解决方案 »

  1.   

    to javamap:你的意思是说,win2000发现这个数据报的目的主机上没有程序准备接收它的话,就返回
    一个错误标志给我的应用程序,而java把它解释成一个exception,是吗?实际上throw 出exception后,这个socket还是有效的,还能继续用。那么我怎么在收到
    一个IOException后,在程序里判断是这个原因引起的,还是确实是网络出故障而引起的呢?
      

  2.   

    找到了一点原因。根据udp协议,目的主机在收到udp包时,发现没有进程在监听端口的话,会向包发送者
    发送一个“目的端口不可到达”的icmp包,我程序中的Exception就是由该包引起的。但为什么在win2000上有此问题,而NT, HP Unix, Solaris(我今天又在Solaris上测了
    我的程序)上都没有此问题?答案继续寻找中。
      

  3.   

    So I said K2000 was doing a good job.
      

  4.   

    又仔细看了一遍Richard Stevens的《UNIX 网络编程》。
    对于已连接的udp socket,操作系统内核会把“端口不可到达”的错误消息发送给应用程序;
    对无连接的udp socket,则操作系统不会发给应用程序。仔细想了一想,觉得还是这种方式比较好,所以我的意见和javamap正好相反,win2000 was
    doing a not very good job.
      

  5.   

    结帖啦!顺带说两句,从本帖的反映程度来看,java栏的成员的学习气氛太差了。
    本来,如果好好讨论一下这个问题的话,不但对java的语言学习有帮助,
    对windows和unix下的网络编程知识更是大有帮助。可惜这么多人就喜欢
    纠缠在一些开发工具、界面等问题上面。很多很浅显的问题问来问去干
    什么呢?你在问之前经过仔细的探索了吗?还是脚踏实地,多看看书,多做做实验吧!