InetAddress
//获取本机的IP地址信息(主机名/本机IP地址)
InetAddress inetAddress = InetAddress.getLocalHost();
System.out.println("主机名:" + inetAddress.getHostName());
System.out.println("IP地址:" + inetAddress.getHostAddress());
System.out.println("获取百度IP:" + inetAddress.getByName("www.baidu.com"));
传输层协议中有两个非常重要的协议:
- 传输控制协议TCP
- 用户数据报协议UDP
TCP协议
- 使用TCp协议前,须先建立TCP连接,形成传输数据通道
- 传输前,采用“三次握手”方式,是可靠的
- TCP协议进行通信的两个应用进程:客户端、服务端
- 在连接中可进行大数据量的传输
- 传输完毕,需释放已建立的连接,效率低
Socket
- 利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
- 通信的两端都要有Socket,是两台机器间通信的端点。
- 网络通信其实就是Socket间的通信。
- Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
- 一般主动发起通信的应用程序属客户端,等待通信请教的为服务端。
服务端代码
public class TCPServer {
public static void main(String[] args) throws IOException {
System.out.println("服务端开启");
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
System.out.println("连接成功");
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
inputStream.read(bytes);
String str = new String(bytes);
System.out.println(str);
String response = "来了";
OutputStream outputStream = socket.getOutputStream();
outputStream.write(response.getBytes());
outputStream.close();
inputStream.close();
}
}
客户端代码
public class TCPClient {
public static void main(String[] args) throws IOException {
System.out.println("客户端开启");
Socket socket = new Socket("127.0.0.1",8888);
OutputStream outputStream = socket.getOutputStream();
String str = "小红在吗";
outputStream.write(str.getBytes());
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
inputStream.read(bytes);
String getstr = new String(bytes);
System.out.println(getstr);
inputStream.close();
outputStream.close();
}
}
UDP协议
- 将数据、源、目的封装成数据包,不需要建立连接
- 每个数据包的大小限制在64K内
- 因无需连接,故事不可靠的
- 发送数据结束时无需释放资源,速度快
DatagramSocket
- 类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。
- UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送达目的地,也不能确定什么时候可以抵达。
-DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。 - UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。
服务端代码
public class UDPServer {
public static void main(String[] args) throws IOException {
System.out.println("收货驿站已开门");
DatagramSocket datagramSocket = new DatagramSocket(8088);
//接收包裹的仓库
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
//接收包裹
datagramSocket.receive(datagramPacket);
//拆快递
String str = new String(datagramPacket.getData(),0,datagramPacket.getLength());
System.out.println(str);
datagramSocket.close();
}
}
客户端代码
public class UDPClient {
public static void main(String[] args) throws IOException {
System.out.println("发货公司");
DatagramSocket datagramSocket = new DatagramSocket(8888);
String str = "我是快递";
byte[] bytes = str.getBytes();
//参数相当于,包裹,包裹的重量,收件人地址,收件人手机号
DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),8088);
//寄出快递
datagramSocket.send(datagramPacket);
datagramSocket.close();
}
}
URl编程
URL:统一资源定位符,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的www,ftp站点。浏览器通过解析给定的URl可以在网络上查找相应的文件或其他资源。
URL的基本结构由5部分组成:
传输协议://主机名:端口/文件名
例如:http://localhost:8080/index.jsp
URL url = new URL("https://www.baidu.com/");
System.out.println("协议:" + url.getProtocol());
System.out.println("主机:" + url.getHost());
System.out.println("端口号:" + url.getPort());
System.out.println("路径:" + url.getPath());
System.out.println("文件:" + url.getFile());
System.out.println("参数:" + url.getQuery());
//爬虫技术:第一步拿到网页源码,第二步使用正则表达式匹配
StringBuilder sb = new StringBuilder();
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
byte[] bytes = new byte[1024];
int len = -1;
while ((len = is.read(bytes)) != -1) {
String str = new String(bytes, 0, len);
sb.append(str);
}
is.close();
File file = new File("D:test.html");
FileWriter fw = new FileWriter(file);
fw.write(sb.toString());
fw.close();