原文地址 译者:贾毅 校对:方腾飞
java提供了非常易用的网络api,调用这些api我们可以很方便的通过建立tcp/ip或udp套接字,在网络之间进行相互通信,其中tcp要比udp更加常用,但在本教程中我们对这两种方式都有说明。
在网站上还有其他三个与java网络相关的教程,如下:
1.java io 教程
2.java nio 教程
3.java服务器多线程教程 (参与翻译可以联系我们)
尽管java网络api允许我们通过套接字(socket)打开或关闭网络连接,但所有的网络通信均是基于java io类 inputstream和outputstream实现的。
此外,我们还可以使用java nio api中相关的网络类,用法与java网络api基本类似,java nio api可以以非阻塞模式工作,在某些特定的场景中使用非阻塞模式可以获得较大的性能提升。
java tcp网络基础
通常情况下,客户端打开一个连接到服务器端的tcp/ip连接,然后客户端开始与服务器之间通信,当通信结束后客户端关闭连接,过程如下图所示:
客户端通过一个已打开的连接可以发送不止一个请求。事实上在服务器处于接收状态下,客户端可以发送尽可能多的数据,服务器也可以主动关闭连接。
java中socket类和serversocket类
当客户端想要打开一个连接到服务器的tcp/ip连接时,就要使用到java socket类。socket类只需要被告知连接的ip地址和tcp端口,其余的都有java实现。
假如我们想要打开一个监听服务,来监听客户端连接某些指定tcp端口的连接,那就需要使用java serversocket类。当客户端通过socket连接服务器端的serversocket监听时,服务器端会指定这个连接的一个socket,此时客户端与服务器端间的通信就变成socket与socket之间的通信。
关于socket类和serversocket类会在后面的文章中有详细的介绍。
java udp网络基础
udp的工作方式与tcp相比略有不同。使用udp通信时,在客户端与服务器之间并没有建立连接的概念,客户端发送到服务器的数据,服务器可能(也可能并没有)收到这些数据,而且客户端也并不知道这些数据是否被服务器成功接收。当服务器向客户端发送数据时也是如此。
正因为是不可靠的数据传输,udp相比与tcp来说少了很多的协议开销。
在某些场景中,使用无连接的udp要优于tcp,这些在文章java udp datagramsocket类介绍中会有更多介绍。