天天看点

Java网络教程-基础

原文地址   译者:贾毅  校对:方腾飞

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网络教程-基础

​客户端通过一个已打开的连接可以发送不止一个请求。事实上在服务器处于接收状态下,客户端可以发送尽可能多的数据,服务器也可以主动关闭连接。

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类介绍中会有更多介绍。