一:InetAddress类
1.什么是InetAddress
此类表示Internet协议(IP)地址。
2.常见用法:
InetAddress inetAddress = InetAddress.getByName("www.jd.com");//通过域名创建一个InetAddress对象
InetAddress inetAddress1 = InetAddress.getLocalHost();//创建本机的InetAddress对象
InetAddress inetAddress2= InetAddress.getByName("127.0.0.1");//通过IP创建InetAdress对象
System.out.println(inetAddress);//得到域名+IP的字符串--www.jd.com/180.97.189.3
System.out.println("ip:"+inetAddress.getHostAddress());//ip
System.out.println("域名:"+inetAddress.getHostName());//域名//或者自己电脑的名字
System.out.println(inetAddress1);
3.补充说明
本机IP:127.0.0.1
IPv4:
IPv4.的IP地址由32位二进制数组成,为便于使用,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数,该表示方法称为点分十进制。 例如維基媒體的一个IP位址是208.80.152.2。 位址可分为A、B、C、D、E五大类,其中E类属于特殊保留地址。
IPv6:
IPv6 地址的长度为128 位,由八个16 位字段组成,相邻字段用冒号分隔。 IPv6 地址中的每个字段都必须包含一个十六进制数字,而IPv4 地址则以点分十进制表示法表示
二:Socket
1.什么是Socket
Socket:套接字
该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。
套接字的实际工作由SocketImpl类的实例执行。 应用程序通过更改创建套接字实现的套接字工厂,可以配置自己创建适合本地防火墙的套接字。
2.Socket常用方法
Socket socket = new Socket(InetAddress serverIp,String port);
//通过InetAddress对象和端口号创建连接型Socket类对象
socket.getInputStream();//得到输入流,返回InputStrea对象
socket.getOutputStream();//获取输出流,返回OutputStream对象
socket.close();//关闭连接
ServerSocket serverSocket = new ServerSocket(String port);//通过端口号创建接受型ServerSocket类对象
serverSocket.accept();//等待用户连接,并返回一个Socket对象,用于接收用户传输的信息
serverSocket.close();//关闭连接
3.Socket应用案例
4.DatagramSocket和DatagramPacket 类
1.DatagramSocket介绍
此类表示用于发送和接收数据报数据包的套接字。
数据报套接字是分组传送服务的发送或接收点。 在数据报套接字上发送或接收的每个数据包都被单独寻址和路由。 从一个机器发送到另一个机器的多个分组可以不同地路由,并且可以以任何顺序到达。
示例: DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));其中相当于: DatagramSocket s = new DatagramSocket(8888);这两种情况都将创建一个DatagramSocket,可以在UDP端口8888上接收广播。
2.DatagramPacket 介绍
该类表示数据报包。
数据报包用于实现无连接分组传送服务。 仅基于该数据包中包含的信息,每个消息从一台机器路由到另一台机器。 从一台机器发送到另一台机器的多个分组可能会有不同的路由,并且可能以任何顺序到达。 包传送不能保证
3.UDP的使用步骤
发送端:
//1.建立连接
DatagramSocket socket = null;
//2.获得连接对象
//获取对方的IP和端口号进行连接
InetAddress Ip = null;
int port = 9999;
//4.创建数据包
String msg = "你好";
DatagramPacket packet = null;
try {
socket = new DatagramSocket();
Ip = InetAddress.getByName("localhost");
//数据,数据的长度起始,发送的地址
packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,Ip,port);
//5.发送包
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
}finally {
//6.关闭资源
if (socket != null){
socket.close();
}
}
接收端:
DatagramSocket socket = null;
try {
//1.开启自己的端口(客户端连接的端口)
socket = new DatagramSocket(9999);
//2.接收数据
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);//堵塞接收
//3.处理数据
byte[] target = packet.getData();
int len=0;
if (target.length!=0){
for (int i=0;i<target.length;i++){
if (target[i]=='\0'){
len=i;
break;
}
}
}
//4.输出数据
System.out.println("from:"+packet.getAddress());
System.out.println(new String(target,0,len));
} catch (Exception e) {
e.printStackTrace();
}finally {
if (socket!=null){
socket.close();
}
}
4.UDP实现在线聊天案例
三,URL
内容比较简单直接上实例代码
package URL;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLTest {
public static void main(String[] args) {
HttpURLConnection connection = null;
InputStream in = null;
FileOutputStream fos = null;
try {
//获取百度的HTML页面//也可以获取URL对应的音频,视屏
URL url = new URL("https://www.baidu.com/");
//通过URL打开连接
connection = (HttpURLConnection) url.openConnection();
//获取连接的输入流
in = connection.getInputStream();
//保存文件
fos = new FileOutputStream("1.html");//文件后缀与获取的文件对应
byte[] buffer = new byte[1024];
int len = 0;
while((len = in.read(buffer))!=-1){
fos.write(buffer,0,len);
}
//获取连接的状态
String msg = connection.getResponseMessage();
System.out.println("连接状态:"+msg);
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭资源
if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in !=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null){
connection.disconnect();
}
}
}
}