1 网络通信协议
1.1 IP地址
1.2 端口号
1.3 InetAddress基本使用
在java中,可以使用一个类表示ip地址,这个类叫做InetAddress
static InetAddress getLocalHost(): 获取到本机的ip地址对象。
static InetAddress getByName(String host):根据主机名获取到ip地址对象。
String getHostName(): 获取字符串类型的主机名。
String getHostAddress(): 获取字符串类型的ip地址。
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
在java中,可以使用一个类表示ip地址,这个类叫做InetAddress
static InetAddress getLocalHost(): 获取到本机的ip地址对象。
static InetAddress getByName(String host):根据主机名获取到ip地址对象。
String getHostName(): 获取字符串类型的主机名。
String getHostAddress(): 获取字符串类型的ip地址。
*/
public class Demo01InetAddress {
public static void main(String[] args) throws IOException {
method3();
}
/*
* String getHostName(): 获取字符串类型的主机名。
* String getHostAddress(): 获取字符串类型的ip地址。
*/
public static void method3() throws IOException {
//先获取一个InetAddress对象。
InetAddress address = InetAddress.getLocalHost();
//InetAddress里面封装了ip地址和主机名。
//我们可以通过getHostName和getHostAddress单独获取到ip地址和主机名
String hostName = address.getHostName();
String ip = address.getHostAddress();
//打印
System.out.println("主机名为:" + hostName);
System.out.println("ip地址为:" + ip);
}
/*
* static InetAddress getByName(String host):根据主机名获取到ip地址对象。
*/
public static void method2() throws IOException {
//根据指定的主机名获取到ip地址对象
//如果在网络中有多个相同的主机名,那么只会获取一个。
//这个方法,不仅可以根据主机名获取ip地址对象,也可以根据字符串类型的ip地址去获取。
//参数传递主机名是可以的,如果传递一个ip地址,也是可以的。
InetAddress address = InetAddress.getByName("jn-pc");
System.out.println(address);
}
/*
* static InetAddress getLocalHost(): 获取到本机的ip地址对象。
*/
public static void method1() throws IOException {
//获取到的是本机的ip地址对象
InetAddress address = InetAddress.getLocalHost();
//InetAddress这个对象中不仅封装了ip地址,还封装了主机名。
System.out.println(address);
}
}
2 UDP和TCP协议
2.1 UDP协议
UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
特点:
1.面向无连接,传输数据的时候不需要建立连接。
2.传输的数据有大小限制(64k)
3.效率高,不安全。
使用场景:聊天,广播。
2.2 TCP协议
先建立连接,然后传输数据。
特点(了解)
1.面向连接,发送数据前必须建立连接。
2.传输数据没有大小限制。
3.安全,效率低。
使用场景:长传,下载。
2.3 UDP的发送与接收
UDP发送接收流程
Demo01Sender类
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
UDP程序的发送端
发送端需要用到两个类
DatagramPacket:叫做数据报包。 相当于快递的箱子,用来封装要发送的数据。
DatagramSocket:叫做套接字,用来发送数据报包对象。相当于快递员,用来发送数据。
DatagramPacket 构造方法:
DatagramPacket(