Java网络编程
URL类
构造方法
- 使用字符串创建一个URL对象
读取URL中的资源
- 对象调用
InputStream openStream()
方法可以返回一个输入流- 该输入流指向URL对象所包含的资源
套接字
套接字概述
- 当两个程序需要通信时,可以通过使用Socket类建立套接字对象并连接在一起
客户端套接字
- 客户端程序使用Socket类建立负责连接到服务器的套接字对象
- 构造方法:
Socket(String host, int port) throws IOException
- 客户端用输入流(
getInputStream()
)可以读取服务器写到输出流(DataOutputStream
)中的数据 - 服务器用输入流可以读取客户端写到输出流中的数据
ServerSocket对象与服务器端套接字
- 服务器端必须建立一个ServerSocket对象(类似邮局中的业务员)
- 服务器的ServerSocket对象建立之后,可以使用
accept()
方法将客户端的套接字和服务器端的套接字连接起来
- 注意:
accpet()
方法会阻塞线程的执行,直到接收到客户的呼叫,并返回一个Socket对象 - 建立连接后,服务器端的套接字对象可以调用相关的方法获取客户端的IP地址和端口
- socket对象使用完毕后需要自行关闭
- 注意关闭输出流
使用多线程技术
- 套接字通信中的两个基本原则:
- 服务器启动一个专门的线程,在该线程中和客户的套接字建立连接
- 客户端和服务端都需要在一个单独的线程中读取信息
UDP数据报
- 基于UDP的信息传递更快,但不提供可靠性保证
- 基于UDP通信的基本模式:
发送数据包
- 使用
DatagramPacket
类将数据打包 - 两个构造方法将数据打包:
DatagramPacket(byte data[], int length, InetAddress address, int port)
DatagramPacket(byte data[], int offset, int length, InetAddress addresss ,int port)
- 用
DatagramSocket
类的对象来发送数据包
接收数据包
- 同样使用
DatagramSocket
类的对象 - 构造方法:
DatagramSocket(int port)
- 端口参数必须和待接收的数据包端口相同
- 使用
receive(DatagramPacket pack)
接收数据包- 提前准备一个数据包以便收取数据包
receive()
方法可能会阻塞,直到收到数据包