版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40990836/article/details/79090461
JAVA 网络编程 IO & 网络组合编程
// 网络编程
// IO & 网络 组合编程
// 网络模型:
// OSI模型:开放系统互联(Open System Interconnection)
// 网络七层:
// ① 物理层:
// 定义了网线,网卡等硬件设备的接口规范,通过传输比特流(数据:比特 bit),
// 将数据 1 、0 数模转换 电流强弱 发送数据 , 将 电流强弱 模数转换数据 1 、 0
// 接收数据
// ② 数据链路层
// 通过交换机,在不同主机间,利用主机的MAC地址(网卡地址)将底层数据(帧)进行封装
// 与解封装
// ③ 网络层
// 通过路由器,在不同主机间,利用IP地址,将底层数据进行封装与解封装
// ④ 传输层
// 定义协议与端口,将下层数据(段)进行分段、传输、重组
// ⑤ 会话层
// 主机间建立起可以通信的通道
// ⑥ 表示层
// 对传输的数据进行解释(加密解密 | 加压解压), 进行 机器语言和人文语言之间的相互转换
// ⑦ 应用层
// 实体语言(FTP : 数据下载 WEB : 网页交互 应用 : 具体应用功能)
// 1.主机至网络层 - 物理层、 数据链路层
// 2.国际层 - 网络层
// 3.传输层 - 传输层
// 4.应用层 - 会话层、 表示层、 应用层
// 域名
// http:// www|news|sports.sina.com.cn
// 前缀: 代表主机服务器(www以万维网指定的服务标准搭建的服务器)
// 主体: 域名主体,可以自定义
// 后缀: 公司性质(com 商业模式企业 edu教育 net服务 org组织 cn中国 hk香港)
// 域名解析
// hosts 文件 -- ip 与 域名 对应关系
// DNS服务 -- 指向指定的DNS服务器(带有IP域名解析的服务器)
// 请求宽带供应商 -- 进行DNS服务器解析
public class Net02{
public static void main(String[] args) throws UnknownHostException{
// 获取主机ip
//
InetAddress ia = InetAdress.getLocalHost();
System.out.println(ia);
String ip = ia.getHostAdress();
System.out.println(ip);
String local = ia.getHostName();
System.out.println(local);
// 通过ip 地址获取服务器地址信息
// 局域网: getHostName 可以通过hosts 文件配置,默认值同getHostAddress
InetAddress byName = InetAddress.getByName("填写ip地址");
// 根据byName可以获取到 他的主机名, 和 主机地址
System.out.println(byName.getHostName() + ":" + byName.getHostAddress());
// 广域网
InetAddress[] ads = InetAddress.getAllByName("baidu.com");
for(int i = 0; i < ads.length;i++){
System.out.println(ads[i].getHostName() + ":" + ads[i].getHostAddress());
}
}
}
二、模仿信息发送和信息接受
发送方
// 信息发送方
public class MessageSend{
public static void main(String[] args) throws IOException,InterruptedException{
// ① 创建发送方Socket
// Socket所需要条件 ip 端口
DatagramSocket sender = new DatagramSocket();
// ② 将数据封包为数据报包
byte[] data = "发送方发来的贺电".getByte();
// 发送方报包: 数据byte[] 数据长度接受方的地址(IP) 接收方的端口号
DatagramPacket packet = new DatagramPacket(data,data.lenth,localhost,20000);
System.out.println("数据发送中");
// 发送数据
sender.send(packet);
// System.out.println("发送完成");
sender.clost();
}
}
接收方
// 接收方
public class MessageReceve{
public static void main(String[] args) throws IOException{
System.out.println("接收方开始接受数据....");
// ① 创建接收方Socket(注意: 接收方一定要明确端口号)
DatagramSocket recevier = new DatagramSocket(20000);
// ② 生成存储报文的数据容器
// 注意: 接受方接受数据的容器大小应该大于等于发送方一次发送数据报包的大小
// 且容器大小有上额限定
byte[] buf = new byte[1024];
// ③ 通过对应的数据包对象接受数据
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
// 注: 阻塞状态等待发送方发来的数据
recevier.receive(packet);
// ④ 应用接收到的数据 ( 信息均存储在接收方的报包对象中)
System.out.println("IP" + packet.getAddress().getHostAddress());
System.out.println("端口" + packet.getPort());
byte[] data = packet.getData();
System.out.println(new String(data));
// 关闭服务
recevier.close();
}
}