2013-02-14 97 views
8

我对Java套接字编程很新颖。我已经考虑过java只处理Internet域套接字,它将支持UDP和TCP以及原始IP协议。我想知道java是否支持Raw Sockets而不使用任何第三方应用程序?如果有可能的话,任何人都可以用一个小例子来帮助我?任何小小的建议都会非常棒!java中的原始套接字

+1

如果你想要Java源代码实现套接字,然后看一看源代码http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/ java/net/Socket.java – AurA 2013-02-14 11:05:40

+0

是java支持行插座吗? – Nikhil 2013-02-14 11:11:41

+4

TCP/IP和UDP不是原始套接字。 – h22 2013-02-14 11:14:18

回答

4

Java标准库中对raw sockets唯一真正可用的支持似乎是InetAddress.isReachable(),如果允许,它可以执行ICMP ping操作。这实际上并不多,甚至可能不是真正的原始套接字,只是一个协议。

对于其他类型的原始通信,我建议使用Berkley sockets under Linux(需要root权限)通过一些基于JNI的包装。

+0

查看评论原来的帖子。所有“java.net”接口都支持Berkley套接字协议,并且在JVM中实现。 – 2013-02-14 11:19:26

+2

“原始套接字”理解能够编写完全自定义网络数据包的东西,支持诸如任意(不仅仅是ping)ICMP请求之类的东西。 – h22 2013-02-14 11:25:43

+3

@詹姆斯安德森 - 你的评论没有任何意义。 1)伯克利套接字是一种API,不是协议。 2)虽然JVM可能(或可能不)在内部使用这些C/C++ API,但它们不能直接用于Java代码。 – 2013-02-14 11:35:54