网络编程
>软件架构
C/S架构: 客户端和服务器架构
B/S架构: 浏览器和服务器架构
>网络通信要素
要素①: IP地址和域名
要素②: 端口号
要素③: 网络通信协议
>TCP协议与UDP协议
TCP 协议:•TCP 协议进行通信的两个应用进程:客户端、服务端。使用 TCP 协议前,须先 建立 TCP 连接 ,形成基于字节流的传输数据通道•传输前,采用“三次握手”方式,点对点通信,是 可靠的–TCP 协议使用 重发机制 ,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。在连接中可进行 大数据量的传输传输完毕,需 释放已建立的连接,效率低UDP 协议:•UDP 协议进行通信的两个应用进程:发送端、接收端。将数据、源、目的封装成数据包(传输的基本单位), 不需要建立连接发送不管对方是否准备好,接收方收到也不确认,不能保证数据的完整性,故是 不可靠的每个数据报的大小限制在 64K 内发送数据结束时 无需释放资源,开销小,通信效率高•适用场景:音频、视频和普通数据的传输。例如视频会议 TCP 生活案例:打电话UDP 生活案例:发送短信、发电报
>网络变成API
1)InetAddress类
InetAddress 类主要表示 IP 地址,两个子类:Inet4Address、Inet6Address。
InetAddress 类没有提供公共的构造器,而是提供了如下几个静态方法来获取 InetAddress 实例
• public static InetAddress getLocalHost()• public static InetAddress getByName(String host)• public static InetAddress getByAddress(byte[] addr) InetAddress 提供了如下几个常用的方法• public String getHostAddress() :返回 IP 地址字符串(以文本表现形式)• public String getHostName() :获取此 IP 地址的主机名• public boolean isReachable(itimeout):测试是否可以达到该地址
2)Socket类
--DatagramSocket类
• public DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。套接字将被绑定到通配符地址,IP 地址由内核来选择。• public DatagramSocket(int port,InetAddress laddr)创建数据报套接字,将其绑定到指定的本地地址。本地端口必须在 0 到 65535 之间(包括两者)。如果 IP 地址为 0.0.0.0,套接字将被绑定到通配符地址,IP 地址由内核选择。• public void close()关闭此数据报套接字。• public void send(DatagramPacket p)从此套接字发送数据报包。DatagramPacket 包含的信息指示:将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。• public void receive(DatagramPacket p)从此套接字接收数据报包。当此方法返回时,DatagramPacket 的缓冲区填充了接收的数据。数据报包也包含发送方的 IP 地址和发送方机器上的端口号。 此方法在接收到数据报前一直阻塞。数据报包对象的length 字段包含所接收信息的长度。如果信息比包的长度长,该信息将被截短。• public InetAddress getLocalAddress()获取套接字绑定的本地地址。• public int getLocalPort()返回此套接字绑定的本地主机上的端口号。• public InetAddress getInetAddress()返回此套接字连接的地址。如果套接字未连接, 则返回 null。• public int getPort()返回此套接字的端口。如果套接字未连接,则返回 -1。
--DataPacket类
• public DatagramPacket(byte[] buf,int length)构造 DatagramPacket,用来接收长度为length 的数据包。 length 参数必须小于等于 buf.length。• public DatagramPacket(byte[] buf,int length,InetAddress address,int port)构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。length 参数必须小于等于 buf.length。• public InetAddress getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。• public int getPort()返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。• public byte[] getData() 返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度。• public int getLength() 返回将要发送或接收到的数据的长度。
正则表达式
关于常用的正则语法
[abc]: 可以匹配abc中的任意一个字符
[^abc]: 可以匹配非abc中的任意一个字符
[a-z]: 表示小写字母中的任意一个
[0-9]: 表示0~9中的任意一个数字
[0-9a-zA-Z]: 表示0~9中的任意一个数字或任意一个字母
[^0-9a-zA-Z]: 表示非0~9中的任意一个数字或任意一个字母
.: 表示任意单个字符
\d: 表示数字[0~9]
\D: 表示非数字[0~9]
\s: 表示由空字符组成
\S: 表示非空
\w: 表示字母数字下划线 [0-9a-zA-Z_]
\W: 表示非字母数字下划线
?: 表示出现0次或1次
+: 表示出现1次或多次
*: 表示出现任意次
{n}: 表示n次
{n,}: 表示n次及n次以上
{n,m}: 表示n到m次
(): 表示一个整体
|: 表示或