Java网络教程-基础

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

Java提供了非常易用的网络API,调用这些API我们可以很方便的通过建立TCP/IP或UDP套接字,在网络之间进行相互通信,其中TCP要比UDP更加常用,但在本教程中我们对这两种方式都有说明。

在网站上还有其他三个与Java网络相关的教程,如下:

1.Java IO 教程

2.Java NIO 教程

3.Java服务器多线程教程 (参与翻译可以联系我们)

尽管Java网络API允许我们通过套接字(Socket)打开或关闭网络连接,但所有的网络通信均是基于Java IO类 InputStreamOutputStream实现的。

此外,我们还可以使用Java NIO API中相关的网络类,用法与Java网络API基本类似,Java NIO API可以以非阻塞模式工作,在某些特定的场景中使用非阻塞模式可以获得较大的性能提升。

Java TCP网络基础

通常情况下,客户端打开一个连接到服务器端的TCP/IP连接,然后客户端开始与服务器之间通信,当通信结束后客户端关闭连接,过程如下图所示:

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

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

时间: 2024-09-15 10:49:21

Java网络教程-基础的相关文章

Java网络教程

本系列尚未翻译完成,有兴趣参与翻译的请在本文评论处留言. 1 Java 网络教程: 基础 2 Java 网络教程: Socket 3 Java 网络教程: ServerSocket 4 Java Networking: UDP DatagramSocket 5 Java 网络教程: URL + URLConnection 6 Java网络教程:JarURLConnection 7 Java 网络教程: InetAddress 8 Java网络教程:Protocol Design 转载自 并发编程

Java网络教程:Protocol Design

原文地址  译者:司余 如果设计一个客户端到服务器的系统,那么同时也需要设计客户端和服务器之间的通信协议.当然,有时候协议已经为你决定好了,比如HTTP.XML_RPC(http response 的 body 使用xml).或者SOAP(也是http response 的 body 使用xml).设计客户端到服务端协议的时候,一旦协议决定开启一会儿,来看一些你必须考虑的地方: 1. 客户端到服务端的往返通讯 2.区分请求结束和响应结束. 3.防火墙穿透 客户端-服务端往返 当客户端和服务端通信

Java 网络教程: InetAddress

Java 网络教程: InetAddress 创建一个 InetAddress 实例 InetAddress 的内部方法 InetAddress 是 Java 对 IP 地址的封装.这个类的实例经常和 UDP DatagramSockets 和 Socket,ServerSocket 类一起使用. 创建一个 InetAddress 实例 InetAddress 没有公开的构造方法,因此你必须通过一系列静态方法中的某一个来获取它的实例. <!–more–> 下面是为一个域名实例化 InetAdd

Java 网络教程: JarURLConnection

Java 网络教程: JarURLConnection Java 中 JarURLConnection 类用来链接 Java 的 Jar 包文件.一旦连接成功,你就可以获取到 Jar 包里面文件的内容. 下面是一个简单的实例: String urlString = "http://butterfly.jenkov.com/" + "container/download/" + "jenkov-butterfly-container-2.9.9-beta.j

Java 网络教程: ServerSocket

用java.net.ServerSocket实现java服务通过TCP/IP监听客户端连接,你也可以用Java NIO 来代替java网络标准API,这时候需要用到 ServerSocketChannel. 创建一个 ServerSocket连接 以下是一个创建ServerSocket类来监听9000端口的一个简单的代码 ServerSocket serverSocket = new ServerSocket(9000); 监听请求的连接 要获取请求的连接需要用ServerSocket.acce

Java网络编程基础(三) Datagram类使用方法

Datagram(数据包)是一种尽力而为的传送数据的方式,它只是把数据的目的地记录在数据包中,然后就直接放在网络上,系统不保证数据是否能安全送到,或者什么时候可以送到,也就是说它并不保证传送质量. 1 UDP套接字 数据报(Datagram)是网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的.独立的.自身包含地址信息的消息,它能否到达目的地.到达的时间.到达时内容是否会变化不能准确地知道.它的通信双方是不需要建立连接的,对于一些不需要很高质量的应用程序来说,数据报通信是一

Java网络编程基础(二) Socket类的使用方法

当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数. 两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有I

Java网络编程基础(一) InetAddress类的使用

InetAddress类在网络API套接字编程中扮演了一个重要角色. 参数传递给流套接字类和自寻址套接字类构造器或非构造器方法.InetAddress描述了32位或64位IP地址,要完成这个功能,InetAddress类主要依靠两个支持类Inet4Address 和 Inet6Address,这三个类是继承关系,InetAddrress是父类,Inet4Address 和 Inet6Address是子类. 由于InetAddress类只有一个构造函数,而且不能传递参数,所以不能直接创建InetA

Java网络教程:URL + URLConnection

原文地址  译者:梁远铭   目录 HTTP GET和POST 从URLs到本地文件 在java.net包中包含两个有趣的类:URL类和URLConnection类.这两个类可以用来创建客户端到web服务器(HTTP服务器)的连接.下面是一个简单的代码例子: URL url = new URL("http://jenkov.com"); URLConnection urlConnection = url.openConnection(); InputStream input = url