网络编程是指编写能够在网络环境中运行,进行数据通信的程序的过程。它涵盖了从建立网络连接、发送和接收数据,到关闭连接等一系列操作。网络编程是开发网络应用程序的基础,它使得不同的计算机和设备能够通过网络进行数据交换和通信。
三个核心概念
IP(Internet Protocol)
是互联网协议的意思,它的主要作用是为互联网上的每一台设备分配一个唯一的逻辑地址,这个地址就是我们常说的IP地址。IP地址用于在网络中标识和定位设备,使得数据能够准确地从一个地方传输到另一个地方。IP地址根据版本可以分类为:IPv4和IPv6
InetAddress类
此类表示互联网协议 (IP) 地址。通常包括一个主机名和一个IP地址,并提供了获取和操作IP地址的方法,这些方法可以用于网络编程、服务器配置、主机管理等场景。是Java网络编程和系统配置的基础类之一。
InetAddress
类的主要方法包括:
getByName(String host)
: 通过主机名或IP地址字符串获取一个InetAddress
对象。getLocalHost()
: 获取本地主机的InetAddress
对象。getHostName()
: 获取InetAddress
对象所代表的主机的主机名。getHostAddress()
: 获取InetAddress
对象所代表的主机的IP地址。getCanonicalHostName()
: 获取InetAddress
对象所代表的主机的规范化主机名。getAddress()
: 获取InetAddress
对象的原始IP地址(以字节数组表示)。isMulticastAddress()
: 判断InetAddress
对象是否为多播地址。isLoopbackAddress()
: 判断InetAddress
对象是否为回环地址。
因为InetAddress
类没有公共构造函数,因此不能直接通过new
关键字创建其对象。而是应该使用上述的静态方法来获取InetAddress
对象。
端口(Port)
端口是用于区分不同的网络服务或进程的。每个网络服务或进程都会绑定到一个特定的端口上,以便客户端能够通过该端口与之进行通信,是应用程序在设备中唯一的标识。
在计算机通信中,每个运行的进程或服务都需要一个或多个端口来接收和发送数据。端口号是一个非负整数,范围通常是从0到65535。
端口可以大致分为以下几类:
-
公认端口:从0到1023,这些端口被系统或应用程序保留,通常用于知名的网络服务,如HTTP(80端口)、HTTPS(443端口)、FTP(21端口)等。
-
注册端口:从1024到49151,这些端口是为没有公认端口号的应用程序保留的。这些端口可以由用户或应用程序进行注册,以提供特定服务。
-
动态端口:从49152到65535,这些端口是临时端口,用于短暂的、一次性的服务。这些端口通常不由系统或服务预留,而是由应用程序在需要时动态分配。
协议(Protocol)
网络通信必须依赖于各种协议,如TCP/IP、HTTP、FTP等。这些协议定义了数据如何在网络中传输,包括数据的分组、路由、确认接收等过程,是数据在网络中传输的规则,确保了不同计算机和设备之间能够相互通信和协同工作。
TCP协议和UDP协议
TCP协议和UDP协议是计算机网络中两种主要的传输层协议,它们各自具有不同的特点和应用场景。
TCP协议,全称是传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、字节流的传输层通信协议。TCP在发送数据前需要先建立连接,通过三次握手确保发送方和接收方之间的连接建立成功。
在数据传输过程中,TCP使用确认和重传机制,确保数据包的顺序性和完整性。如果数据包丢失或损坏,TCP会负责重传,直到数据被正确接收。因此,TCP协议适用于对数据可靠性要求较高的应用场景,如文件传输、电子邮件和网页浏览等。
UDP协议,全称是用户数据报协议(User Datagram Protocol),是一种无连接的传输层协议。UDP在发送数据时并不建立连接,而是直接将数据报发送到目标地址。它不保证数据的可靠传输,也不关心数据是否到达目的地,以及数据的顺序和完整性。因此,UDP协议的开销较小,处理速度通常比TCP快。UDP适用于对数据可靠性要求较低、传输经济的应用场景,如音频和视频流、在线游戏、语音通话等实时应用。这些应用可以容忍偶尔的数据丢失,但对传输速度有较高要求。
TCP协议下客户端向服务端发送文字信息实例
客户端代码
服务端代码
运行服务端后运行客户端,客户端与服务端建立连接。
客户端发送信息,服务端打印接收的信息。
客户端输入-1结束消息发送,与服务端断开连接,服务端与客户端结束运行。