网络编程
网络三要素:
- ip:每台计算机的标识号
- 端口:设备中应用程序的标识号
- 协议:连接和通信的规则(UDP&TCP)
InetAddress类
此类表示Internet协议(IP)地址
方法名 | 说明 |
---|
static InetAddress getByName(String host) | 确定主机名称的IP地址。主机名称可以是及其名称,也可以是IP地址 | String getHostName() | 获取此IP地址的主机名 | String getHostAddress() | 返回文本显示中的IP地址字符串 |
UDP
发送数据
不可靠的网络协议。通信的两端各建立一个Socket对象,但只是发送、接收数据的对象。对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。 Java提供DatagramSocket类作为基于UDP协议的Socket 构造方法:
方法名 | 说明 |
---|
DatagramSocket() | 创建数据报套接字并将其绑定到本机地址上的任何可用端口 | DatagramPacket(byte[] buf,int len,InetAddress add,int port) | 创建数据报包,发送长度为len的数据报到指定主机的指定端口 |
相关方法:
方法名 | 说明 |
---|
void send(DatagramPacket p) | 发送数据报包 | void close() | 关闭数据报套接字 | void receive(DatagramPacket p) | 从此套接字接受数据报包 |
发送数据的步骤:
- 创建发送端的Socket对象
- 创建数据并将其打包
- 调用DatagramSocket对象的方法发送数据
- 关闭发送端
接收数据
步骤:
- 创建接收端的Socket对象
- 创建一个数据包用于接受数据
- 调用对象的方法接收数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
构造方法:
方法名 | 说明 |
---|
DatagramPacket(byte[] buf,int len) | 创建一个DatagramSocket用于接收长度为len的数据包 |
相关方法:
方法名 | 说明 |
---|
byte[] getData() | 返回数据缓冲区 | int getLength() | 返回要发送的数据的长度或者接收数据的长度 |
TCP
发送数据
使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信 Java为客户端提供了Socket类,为服务器提供了ServerSocket类
构造方法:
方法名 | 说明 |
---|
Socket(InetAddress address , int port) | 创建流套接字并将其连接到指定IP指定端口号 | Socket(String host,int port) | 创建流套接字并将其连接到指定主机上的指定端口号 |
相关方法:
方法名 | 说明 |
---|
InputStream getInputStream() | 返回此套接字的输入流 | OutputStream getOutputStream() | 返回此套接字的输出流 |
接收数据
构造方法:
方法名 | 说明 |
---|
ServletSocket(int port) | 创建绑定到指定端口的服务器套接字 |
相关方法:
方法名 | 说明 |
---|
Socket accept() | 监听要连接到此的套接字并接受它 |
UDP和TCP的区别
TCP客户端发送
内存往网络写数据 通过三次挥手保证连接的可靠 关流的时候,多了往服务器写入结束标记的动作 最后一步断开连接,通过四次挥手协议保证连接终止
三次握手
客户端确保服务器端建立连接
四次挥手
为了让服务端有时间处理最后的数据
结束标记
Socket.shutdownOutput:仅关闭流,写一个结束标记 相关方法:
方法名 | 说明 |
---|
void shutdownInput() | 将此套接字的输入流放置在“流的末尾” | void shutdownOutput() | 禁止用此套接字的输出流 |
优化
服务器端接收到一张图片就关闭程序或接收到的下一张图片会覆盖上一张图片或无法同时跟多个客户端进行通信
UUID
设定唯一标识
UUID.randomUUID()方法生成随机的文件名
|