网络编程及其代码

CS架构:画面可以做得好,需要开发客户端,也需要开发服务端,用户更新下载太麻烦

BS架构:不需要客户端,只需要页面加服务器,用户不需要下载,打开浏览器就能使用,如果应用过大,用户体验不好。

网络编程三要素:

IP:设备在网络中的地址是唯一标识

端口号:应用程序在设备中的唯一标识

协议:数据在网络中传输的规则,常见的协议有udp,http,https,ftp

IP(IPV4,IPV6)

IPV4:目前的主流方案,最多只有2^32次方,已经用完。可用局域网解决。

分为公网地址(万维网使用)和私有地址(局域网使用)。

IPV6:为了解决IPV4不够用而出现的,最多有2^128次方个ip。特殊ip地址,127.0.0.1也可以是localhost:是送回地址也称本地回环地址。也称本机ip,永远只会寻找当前所在本机。

常用cmd命令:

ipconfig:查看本机地址

ping:检查网络是否连通

inetAddress类的使用

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressExample {
    public static void main(String[] args) {
        try {
            // 通过主机名获取 InetAddress 对象
            InetAddress addressByName = InetAddress.getByName("www.example.com");
            System.out.println("Host Name: " + addressByName.getHostName());
            System.out.println("IP Address: " + addressByName.getHostAddress());

            // 获取本地主机 InetAddress 对象
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println("Local Host Name: " + localHost.getHostName());
            System.out.println("Local IP Address: " + localHost.getHostAddress());

            // 获取 IP 地址的字节数组表示
            byte[] ipAddressBytes = addressByName.getAddress();
            for (byte b : ipAddressBytes) {
                System.out.print(b & 0xFF);  // 使用 0xFF 将字节转换为无符号整数
                System.out.print(".");
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

端口号:应用程序在设备中的唯一标识。

端口号:两个字节表示的整数,取值范围0~65535

其中0~1023之间的端口号用于一些知名的网络服务或应用,我们自己使用1024以上的端口号

一个端口号只能被一个应用程序使用

协议:网络连接中,连接和通信的规则(网络通信协议)

TCP/IP参考模型(TCP/IP协议)。三层:应用层(HTTP,FTP,Telent,DNS)、传输层(TCP,UDP)、网络层(IP,ICMP,ARP)、物理链路层

传输层:udp:用户数据报协议,面向无连接通讯,速度快,有大小限制一次最多64k,数据不安全易丢失。

tcp:传输控制协议,面向连接的通信协议,速度慢,没有大小限制,数据安全。

发送与接受数据

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSender {
    public static void main(String[] args) {
        try {
            // 创建 DatagramSocket 对象,指定发送端口
            DatagramSocket socket = new DatagramSocket();

            // 准备要发送的数据
            String message = "Hello, UDP!";
            byte[] data = message.getBytes();

            // 创建 DatagramPacket 对象,指定目标地址和端口
            InetAddress destinationAddress = InetAddress.getByName("localhost"); // 替换为接收方的 IP 地址
            int destinationPort = 12345; // 替换为接收方的端口
            DatagramPacket packet = new DatagramPacket(data, data.length, destinationAddress, destinationPort);

            // 发送数据
            socket.send(packet);

            // 关闭 socket
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


//接受
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceiver {
    public static void main(String[] args) {
        try {
            // 创建 DatagramSocket 对象,指定接收端口
            int port = 12345; // 替换为实际的接收端口
            DatagramSocket socket = new DatagramSocket(port);

            // 准备缓冲区
            byte[] buffer = new byte[1024];

            // 创建 DatagramPacket 对象,用于接收数据
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            // 接收数据
            socket.receive(packet);

            // 处理接收到的数据
            String receivedMessage = new String(packet.getData(), 0, packet.getLength());
            System.out.println("接收到的数据:" + receivedMessage);

            // 关闭 socket
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值