1. 网络基础知识
IP地址:用来标识网络中的唯一计算机。IPv4:255.255.255.255
域名:DNS会把域名解析成对应的IP地址。
端口号:标识一台计算机上的某一网络程序。范围:0-65535。TCP协议和UDP协议可以同时使用同一个端口,互不影响。
2. TCP/IP协议
1) ISO组织定义一套网络规范。
2) 传输协议:
a) TCP:传输控制协议。面向连接的、数据的传输可靠、有序。 特点:数据传输完整,但效率较低。
Java SE API中针对TCP编程在java.net包中提供了ServerSocket和socket类。
b) UDP:用户数据报协议。面向非连接的、数据的传输不可靠、无序。 特点:数据传输不保证完整,但效率高。一次最多能发送64kb数据。
Java SE API中针对UDP编程在java.net包中提供了DatagramSocket、MulitcastSocket和DatagramPacket类。
3) 应用协议:http,ftp,telnet,smtp
3. InetAddress类:IP地址或域名的抽象表示
获取一个实例:InetAddress.getByName("IP");
常用方法:public String getHostAddress(): 返回 IP地址字符串
public String getHostName(): 获取此 IP地址的主机名。
4. Socket:套接字。网络通信的端点。网络编程也常称为Socket编程。
a) 流式套接字:以IO流的形式来进行数据的传递, 双向通信的。也就TCP编程。
b) 数据报式套接字:以数据名的形式来进行数据的传递。也就UDP编程。
5.TCP编程
a) ServerSocket: 服务器套接字。监听端口并接收客户端连接。
构造方法:ServerSocket(int port); 创建绑定在指定端口的服务器端套接字对象
常用方法:Socket accept() throws IOException; //监听所绑定的端口,并接收客户端连接,接收到一个客户端连接,返回代表该客户端的套接字对象。此方法的接收到连接前一直阻塞。
void close() throws IOException; //关闭此套接字。
b) Socket:客户端套接字。网络通信的端点。通过Socket就可以进行TCP的数据交换。
构造方法:Socket(String ip, int port) throws UnknownHostException,IOException; //创建一个套接字并连接到指定主机的指定端口。
Socket(InetAddress address, int port) throws IOException;
常用方法:public InetAddress getInetAddress(); 返回对方的IP地址。
public int getPort(); 返回对方的端口。
public InetAddress getLocalAddress(); 返回本地的IP地址。
public int getLocalPort(); 返回本地的端口。
public InputStream getInputStream() throws IOException; 返回此套接字的输入流。 关闭返回的 InputStream 将关闭关联套接字。
public OutputStream getOutputStream() throws IOException; 返回此套接字的输出流。 关闭返回的 OutputStream 将关闭关联套接字。
public void close() throws IOException; 关闭此套接字。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。
c) TCP编程方式:
服务器端:
ServerSocket ss = new ServerSocket(6789);
Socket s = ss.accept(); //在接收到客户端连接前,会阻塞。
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
in.readLine(); //读取一行。在读取一行前会阻塞。
PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
out.println("要返回给客户端的响应数据");
s.close();
ss.close();
客户端:
Socket s = new Socket("服务器IP", 6789);
PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
out.println("要发送给服务器端的请求数据");
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
in.readLine(); //读取一行。在读取一行前会阻塞。
s.close();
6. UDP编程
a) DatagramSocket:数据报套接字,用来发送和接收数据报包的套接字。
构造方法:public DatagramSocket() throws SocketException
public DatagramSocket(int port) throws SocketException; 创建数据报套接字并将其绑定到本地主机上的指定端口。
常用方法:public void send(DatagramPacket p) throws IOException; 从此套接字发送数据报包。
public void receive(DatagramPacket p) throws IOException; 从此套接字接收数据报包。此方法在接收到数据报前一直阻塞。
public void close(); 关闭此数据报套接字。
b) DatagramPacket:数据报包。将要发送数据的包或将要接收数据的包。
构造方法:public DatagramPacket(byte[] buf, int offset, int length); 构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。
public DatagramPacket(byte[] buf,int offset,int length,InetAddress address, int port); 构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
常用方法: public byte[] getData(); //返回用来接收或发送数据的缓冲区
public int getOffset(); //返回将要发送或接收到的数据的偏移量。
public int getLength(); //返回将要发送或接收到的数据的长度。
c) UDP要发送(或要接收)的数据的长度是在DatagramPacket构造方法中指定的length长度。如果指定的字节数组的长度大于length,它将截断。
要发送的数据长度用字节数组.length来获取。接收数据的缓冲区应该指定为UDP可发送的字节最大数(65536)。
d) 多接收者:广播和多播。
● 广播(Broadcast):一个发送者,可以将消息发送给本地网络中的所有其它计算机。网络规范指定了本地网络的“255.255.255.255”就是广播地址
● 多播(Multicast):一个发送者,可以将消息发送给李地网络中对我的消息感兴趣的计算机。 感兴趣的只需要加入指定的多播组中。网络规范指定了多播地址是“224.0.0.0-239.255.255.255”范围中的地址都是多播地址。
7. URL类和URLConnection类
1) URL:统一资源定位符,通过URL可以定位到网络上的某个资源。形式:"协议名://IP地址:端口/路径/资源名"
2) Java中的java.net.URL类是url的抽象表示。
常用构造方法:URL(String spec); 根据 String表示形式创建 URL对象。
常用方法:public URLConnection openConnection() throws IOException; 返回一个 URLConnection对象,它表示到 URL所引用的远程对象的连接。
3) URLConnection类。
常用方法:public abstract void connect() throws IOException; 打开到此 URL引用的资源的通信链接
public InputStream getInputStream() throws IOException; 返回从此打开的连接读取的输入流。
public OutputStream getOutputStream() throws IOException; 返回写入到此连接的输出流。
8. URLEncoder和URLDecoder类
URLEncoder类是HTML格式的编码工具类。对‘a-zA-Z0-9.*_-’之外的字符都会进行编码。(空格会转换成+)
public static String encode(String str, String charset) throws IOException;
URLDecoder类是HTML格式的解码工具类。对经过URLEncoder编码后的字符串会进行解码。
public static String decode(String str, String charset) throws IOException;
重点:理解TCP和UDP协议的原理。
掌握TCP编程方式。
使用URL、URLConnection、URLEncoder和URLDecoder类。