JAVAEE细细看 进阶 16 - 网络编程、UDP/TCP

1 篇文章 0 订阅
1 篇文章 0 订阅

网络编程、UDP/TCP

一. 网络通信三要素
  1. IP地址, 要想让网络中的计算机能都互相通信,必须为每台计算机指定一个标识号,ip地址就是这个标识号
  2. 端口,网络的通信,本质上是两个应用程序之间的通信。如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序。也就是应用程序的标识
  3. 协议, 计算机在进行连接和通信时必须遵守一定的规则,这被称为网络通信协议,它对数据的传输格式,传输速率,传输步骤等做了统一的规定,通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议。
二. IP地址

在这里插入图片描述

常用命令
ipconfig: 查看本机IP地址
ping IP地址: 检查网络是否连通

特殊ip地址
127.0.0.1 是回送地址,可以代表本机地址

InetAddress
用于获取IP地址

+ InetAddress getByName(String host) 获取IP地址,参数可以是机器名称,也可以是IP地址, 这个既能拿自己的,也能拿别人的
+ getLocalHost ()  只能取自己的
- getHostName()     获取主机名
- getHostAddress() 获取IP地址
二. 端口

在这里插入图片描述

#####三. 协议
计算机网络中,连接和通信的规则被称为网络协议
分为两种:
在这里插入图片描述
在这里插入图片描述

四. UDP通信程序

发送数据的步骤

  1. 创建发送端的Socket对象(DatagramSocket)
  2. 创建数据包,并且把数据打包
  3. 调用DatagramSocket对象的方法发送数据
  4. 关闭发送端
// 创建发送端,默认会绑定自己的端口
DatagramSocket ds = new DatagramSocket();

// 创建发送数据,需要传参 -  数据,数据的长度,网络IP,端口号
byte[] bytes = "我是发送数据".getBytes();
DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("192.168.23.71"),10086);
// 发送
ds.send(dp);

// 关闭
ds.close();


接收数据的步骤

  1. 创建接收端的Socket对象(DatagramSocket)
  2. 创建一个数据包,用于接收数据
  3. 调用DatagramSocket对象的方法接收数据
  4. 解析数据包,并输出在控制台
  5. 关闭发送端
// 接收端
DatagramSocket ds = new DatagramSocket(10086);

// 创建一个接收包
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by,by.length);

// 接收
ds.receive(dp);

// 查看数据
byte[] data = dp.getData();
// 接收到的数据可能后面还有空数据, 拿到长度,只取有数据的
int len = dp.getLength();
System.out.println(new String(data,0,len));

// 关闭
ds.close();

案例
UDP发送数据:
数据来自于键盘录入,直到输入的数据是886,发送数据结束
UDP接收数据:
因为接收端不知道发送端什么时候停止发送,故采用死循环接收

//  发送端

//创建发送端的Socket对象(DatagramSocket)
DatagramSocket socket = new DatagramSocket();

//创建数据,并把数据打包
while (true) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入要发送的内容");
    String s = sc.next();
    if (!s.equals("886")) {

        DatagramPacket dp = new DatagramPacket(
                s.getBytes(),
                s.getBytes().length,
                InetAddress.getByName("172.20.10.6"),
                10086);

        //调用DatagramSocket对象的方法发送数据
        socket.send(dp);
    } else {
        break;
    }
}

//关闭发送端
socket.close();

// 接收端

//创建接收端的Socket对象(DatagramSocket)
DatagramSocket socket = new DatagramSocket(10086);

//调用DatagramSocket对象的方法接收数据
while (true) {
    //创建一个数据包,用于接收数据
    byte[] by = new byte[1024];
    DatagramPacket dp = new DatagramPacket(by, by.length);

    socket.receive(dp);
    //解析数据包,并把数据在控制台显示
    String s = new String(dp.getData(), 0, by.length);
    System.out.println("接收打的数据: " + s);
}

五. TCP发送数据

发送数据的步骤

  1. 创建Socket对象
  2. 获取输出流,写数据
  3. 释放资源
// 创建socket
Socket socket = new Socket("172.20.10.6",10000);

// 获取它的输出流
OutputStream os = socket.getOutputStream();
os.write("tcp, 我来了。".getBytes());

// 关闭
os.close();
socket.close();

接收数据的步骤

  1. 创建ServerSocket对象
  2. 侦听并接受
  3. 获取输入流,读数据,并把数据显示在控制台
  4. 释放资源
// 创建
 ServerSocket ss = new ServerSocket(10000);

 // 侦听并接受
 Socket accept = ss.accept();

 // 获取输入流
 InputStream its = accept.getInputStream();
 byte[] by = new byte[1024];
 int len;
 while ((len = its.read(by)) != -1) {
     System.out.println("接收到的数据是:" + new String(by, 0, len));
 }

 // 关闭
 its.close();
 ss.close();

六. TCP数据交

七. 总结

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值