首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MulticastSocket:对非套接字的套接字操作

MulticastSocket:对非套接字的套接字操作
EN

Stack Overflow用户
提问于 2009-12-30 01:25:54
回答 6查看 2.7K关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
InetAddress bind = InetAddress.getByName("192.168.0.1")
MulticastSocket socket = new MulticastSocket(new InetSocketAddress(bind,0));
socket.setInterface(bind);

在windows 7和使用JDK6u17的windows上,我在非套接字上得到了一个SocketException: socket操作。

但如果我将第2行改为:

代码语言:javascript
复制
MulticastSocket socket = new MulticastSocket(0);

没关系,也可以在jdk6u14中找到。

为什么?谢谢。

编辑:为什么端口0应该是问题?

代码语言:javascript
复制
MulticastSocket socket = new MulticastSocket(0);

这个code.But一切都很好

代码语言:javascript
复制
MulticastSocket socket = new MulticastSocket(new InetSocketAddress(bind,port));

不管港口是什么。

EN

回答 6

Stack Overflow用户

发布于 2010-08-21 02:53:57

当您绑定到特定的接口时,将setInterface()调用到同一个接口是多余的。把它移开。只有在绑定到INADDR_ANY时,或者在Java中绑定为null (或未指定为参数)的InetAddress时,才需要使用它。

为了解决其他一些答案中的错误,以及它们的含义:

  1. 零港是合法的。它意味着一个系统指定的端口。
  2. 您只需要一个接收多播的MulticastSocket。对于发送,只需使用DatagramSocket即可。
  3. 如果需要指定多播接口(在本例中没有指定),则可以通过MulticastSocket.setInterface()或调用joinGroup()或leaveGroup()来实现。后一个选项为您提供了组级的粒度,但这两种技术都可以工作。这就是他们都被提供的原因。
  4. 如果您没有绑定到特定的接口,那么您肯定应该调用setInterface()。如果您在一个多宿主主机上,您必须在每个接口上调用joinGroup()/leaveGroup()一次,如果您想通过所有这些接口接收它们。

还有一个问题: 192.168.0.1是本地计算机上NIC的IP地址吗?它必须是。

票数 2
EN

Stack Overflow用户

发布于 2009-12-30 01:32:42

根据文档,您应该使用端口号实例化它(因此0将是有效的)。

票数 0
EN

Stack Overflow用户

发布于 2009-12-30 02:08:08

我不太确定。构造函数MulticastSocket(SocketAddress bindaddr)用于什么?为什么它可以在jdk6u14上正常工作,而不是jdk6u17呢?以及为什么在windows 2003服务器上可以使用jdk6u17呢?

关于RHEL5.2 5.2 jdk1.4+

lst1.htm伯克利描述:有人尝试对不是套接字的东西进行操作。指定的套接字参数引用的是文件,而不是套接字。

WinSock描述:和伯克利一样。套接字输入参数不是有效的套接字句柄(要么它从未有效,要么是文件句柄(不是套接字句柄),或者如果它是套接字句柄,它已经关闭)。

详细说明:

如果fd_set中的任何套接字都是无效的套接字句柄,则select():WSAENOTSOCK失败。

开发人员建议:您是否无意中关闭了应用程序某个部分的套接字,而没有通知另一部分?在应用程序中使用套接字状态,并/或将此错误优雅地处理为非致命错误。

当MulticastSocket创建时,socket.isClosed()==true

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1977949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档