本文是在Java Networking翻译而来。欢迎大家联系我,跟我一起交流。本人水平有限,如果错误欢迎指正。
Java已经有一个相当易用的内置网络接口了,这使得通过TCP/IP套接口和UDP套接口进行网络间的通信变得简单容易。比起UDP, TCP明显更比较常用,但是在本教程中二者都会介绍。
在 教程网址上还有其他三个教程,它们和java网络教程都是有关联的。它们是:Java IO Tutorial(输入输出教程)、Java NIO Tutorial(新IO教程)、Java Multithreaded Servers Tutorial(多线程服务器教程)
Java IO Tutorial输入输出教程
Java NIO Tutorial 新IO教程
Java Multithreaded Servers Tutorial 多线程服务器教程
纵然java网络接口可以让你通过sockets打开和关闭网络,但通信还是基于Java IO里面的输入流(InputStream)和输出流(OutputStream)。
你也可以选择Java NIO接口中的网络类。除了Java NIO接口可以在无阻塞模式下工作,这些类和Java网络接口中的类是相似的。在某些情况下,无阻塞模式会给予性能提升。
###Java TCP Networking Basics-- Java TCP网络基础
典型的,一个客户端先启动一个TCP/IP连接一个服务器。然后客户端开始和服务器通信,当客户端结束通信时,它会关闭与服务器的连接。简述如下图:
通过连接,客户端可能发送不止一条请求。事实上,只要服务器准备好接收,客户端可以发送尽可能多的数据。如果服务器想关闭连接,它也可以这么做。
###Java Socket’s and ServerSocket’s java Socket类和 ServerSocket类
当客户端想开启TCP/IP连接服务器,通常会用Socket。告诉Socket IP地址和TCP端口来连接,剩下的都会由Java完成。
如果你想服务器在某个TCP端口监听客户端的连接数,你得用Java ServerSocket。当客户端通过客户端的socket连接到服务器的ServerSocket,针对这个连接,服务器会分配一个Socket。此时,客户端和服务器通过Socket-to-Socket通信。
###Java UDP Networking Basics Java UDP网络基础
UDP工作时会和TCP有一点不同。用UDP时,客户端和服务区是没有连接的。客户端有可能向服务器发送数据,服务器有可能接收到(也有可能没收到)这些数据。在另一边,客户端永远也不知道数据是否已经被服务器接收了。同样的服务器向客户端发送数据也是这样的。
由于没有确认数据的传输,UDP协议具有较小的协议开销。
在几种情况下,无连接的UDP模式比TCP模式更适用。这些情况在Java’s UDP DatagramSocket’s文本中有更详细的涉及。