在Java中的原始套接字

10

我对Java套接字编程还比较陌生。我已经了解到,Java只处理Internet域套接字,并支持UDP、TCP和原始IP协议。我想知道Java是否支持原始套接字而不使用任何第三方应用程序?如果可能的话,有人可以给我提供一个小例子吗?任何小建议都将不胜感激!


1
如果您想了解Java如何实现套接字,则可以查看源代码http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/net/Socket.java。请注意,这是一个专业术语相关的内容。 - AurA
1
Java支持行套接字吗? - Nikhil
5
TCP/IP和UDP不是原始套接字。 - Audrius Meškauskas
2
@duffymo JDK/JRE不支持原始套接字。 - user207421
2
可能是Java涉及原始套接字编程的最佳方法的重复问题。 - Stephen C
显示剩余3条评论
1个回答

5
Java标准库中唯一真正可用的原始套接字支持似乎是InetAddress.isReachable(),如果允许,则可以执行ICMP ping。这真的不多,甚至可能不是真正的原始套接字,只是另一种协议。
对于其他类型的原始通信,我建议使用Linux下的Berkley套接字(需要root权限)通过一些基于JNI的包装器。

请参见原帖中的评论。所有"java.net"接口都支持伯克利套接字协议,并在JVM内部实现。 - James Anderson
2
"原始套接字"是指能够编写完全自定义的网络数据包,支持任意(不仅仅是ping)ICMP请求的东西。 - Audrius Meškauskas
3
@JamesAnderson - 你的评论没有任何意义。1)Berkeley套接字是一个API而不是协议。2)虽然JVM可能(或可能不)在内部使用那些C/C++ API,但它们并不直接可用于Java代码。 - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接