origin:http://tutorials.jenkov.com/java-networking/index.html
java拥有简单易学的networking API,利用该API可以方便的通过TCP/IP socket或者UDP socket在互联网通信。TCP通常比UDP用得多,在本tutorial中二者都会讲到。
下面是三个其他的tutorial,都与java网络tutorial相关。参考如下链接(均尚未翻译):
3.java multi-threaded servers tutorial
即使java的networking API使你通过socket可以打开或关闭网络连接了,但是还会涉及ava的IO类,比如InputStream和OutputStream。
或者你可以利用java NIO API中的networking类,这些类与networking API中的networking类很相似,当然,他们的区别就是NIO API可以在非阻塞模式(non-blocking mode)下工作。非阻塞模式在一些情况下会有很好的表现。
java TCP 网络基础知识
通常客户端与服务器端都是TCP/IP链接。然后客户端开始向服务器通信。当客户端完成通信后,再次关闭连接。下图可以便是描述:
———— ————| 客户端 | | 服务器 |
———— ————
|--------------------------打开连接-------------------------------->|
| --------------------------发送请求-------------------------------->|
|<------------------------接收响应-----------------------------------|
| --------------------------关闭连接-------------------------------->|
客户端打开连接一次可以发送多次请求,不止一次哦。实际上,服务器端准备接收多少数据,客户端就可以发送多少数据。服务器端也有随时关闭连接的权利。
java Socket 和ServerSocket有关
当一个客户端想与服务器端打开连接的时候,它可以通过Socket来完成。只需将IP地址和端口号告诉Socket,剩下的,你就交给java好了。
如果你想开启一个服务器端监听来自某些TCP端口的客户端的请求,那你需要用到ServerSocket。当一个客户端通过客户端的Socket连接服务器端的ServletSocket,服务器将会得到一个分配给它的Socket,只为该连接,这样一来,服务器和客户端就可以Socket-Socket通信了。
Socket和ServerSocket在后续文章会详细讲到。
java UDP 网络基础知识
UDP的工作模式与TCP略有不同。使用UDP的话,服务器与看客户端是无需连接的。客户端可以发送数据给服务器,服务器可能会收到,也可能会收不到。客户端不会知道数据到底有没有发送给服务器(译者注:它也不管数据会不会到服务器)。从服务器到客户端的数据也一样,不可靠。
正因为数据交付没保障,所以UDP协议没有太多开销(less protocol overhead)(译者注:UDP的数据报比TCP数据报精简多了)。
别看UDP没保障,在好多情况下,UDP要比TCP更合适。这些细节将会在第四讲讲到。