套接字如何与常见的网络API相关

时间:2011-01-24 17:13:26

标签: java sockets network-programming

今天早上我问了一个与套接字相关的问题,但这是一个不同的野兽,所以我决定完全单独发帖。

我现在已经知道套接字是什么,以及它们服务的目的。我正在尝试理解他们与Java NIO,Java RMI以及Netty或MINA等所谓的网络API的关系。

  1. 套接字是所有基于Java的网络的基础,NIO是基于Java的网络的基础(也就是说,它是为更高框架提供套接字结构的API Netty还是MINA)?如果没有,那么Java的网络功能的基础是什么?

  2. 可以使用套接字(我理解它或网络层构造)来发送符合更高协议(如TCP或UDP,HTTP,FTP等)的(按字节)消息吗?如果是这样,我会想象开发团队可能会创建自己的HttpProtocol库或SSLProtocol库,是吗?

  3. 我的理解是NIO是所有Java网络的基础,RMI,Netty,MINA等都将NIO框架扩展到他们自己的实现中。它是否正确?如果没有,这些框架如何相互关联?

  4. 再次感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

  

套接字是否是所有基于Java的网络的基础,

对于IP协议,是的。可能有特殊的库,如JavaComm用于串行端口通信,JAIN用于各种电信协议,不是基于套接字的

  

并且NIO是基于Java的网络的基础

不是真的,套接字是。看到上一个答案。 NIO虽然可以构建和扩充套接字以及其他东西。最重要的部分可能是NIO允许您在单个线程中侦听多个套接字上的事件并执行非阻塞IO。 Netty和Mina利用了NIO apis。

NIO代表New I / O,是用于在Java 1.4中引入IO的新API。它做了很多其他东西,而不是套接字IO。可以说,NIO将允许您以更高的复杂性为代价更有效地执行套接字IO。

  

可以使用套接字(我理解它,或网络层构造)来发送符合更高协议(如TCP或UDP)的(逐字节)消息,

没有。套接字使您可以访问传输协议,例如TCP或UDP(实际上使用Java,它将来只有TCP和UDP,也可能是SCTP)。您可以构建在TCP / UDP之上工作的东西,而不是自己实现TCP / UDP(除非您想在TCP或UDP之上实现IP堆栈 - 这是几个VPN或调整协议所做的事情)

  

HTTP,FTP等?

是的,这些通常在TCP之上工作,您可以通过使用java中的套接字来实现HTTP,FTP和其他在TCP / UDP上运行的协议 - 这就是套接字的用途。

答案 1 :(得分:0)

套接字是用于网络的Java基本构建块。它们只允许您执行基本操作:打开连接(TCP或UDP),写入或读取字节以及关闭连接。他们还通过抛出异常来处理失败案例。在OSI模型中,这是第4层(传输)。

更高级别的API构建在套接字之上,它们允许执行更有趣的任务,例如HTTP连接或SSL通信。

Java NIO是第一个Java IO API的新版本。就网络而言,它实质上为非阻塞套接字带来了新的API。

更高级别的API构建于Java IO和/或Java NIO之上。