Java基础:网络编程UDP&TCP详解

概述

什么是网络编程?

Java中提供解决方案

基本通信架构CS/BS


通信三要素


IP地址-InetAddress




InetAddress

java 复制代码
// 目标:
// 1.获取本机ip对象
InetAddress ip = InetAddress.getLocalHost();
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());

// 2.获取指定ip对象
InetAddress ip2 = InetAddress.getByName("www.baidu.com");
System.out.println(ip2.getHostAddress());
System.out.println(ip2.getHostName());

// 3.判断本机与改主机是否联通:ping
boolean reachable = ip2.isReachable(5000);// 可做预警
System.out.println(reachable);

端口号

2协议UDP/TCP





UDP

UDP通信

DatagramSocket


java 复制代码
public class Server {
    public static void main(String[] args) throws Exception {
        // 目标:服务端

        // 1.创建接收端
        DatagramSocket socket = new DatagramSocket(8888);

        // 2.创建数据包对象(接收数据)
        byte[] bytes = new byte[1024*64];
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);

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

        // 4.把数据输出
        // 获取本轮传输的数据多少字节
        int len = packet.getLength();
        String msg = new String(bytes, 0 , len);
        System.out.println(msg);

        // 获取发送端的ip地址与端口
        InetAddress ip = packet.getAddress();
        int port = packet.getPort();
        System.out.println(ip.getHostAddress() + ":" + port);


        // 5.关闭资源
        socket.close();
    }
}
java 复制代码
public class Client {
    public static void main(String[] args) throws Exception {
        // 目标:客户端

        // 1.创建发送对象
        DatagramSocket socket = new DatagramSocket();

        // 2.创建数据包对象
        String msg = "你好,我是客户端";
        byte[] data = msg.getBytes();
        DatagramPacket packet =
                new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 8888);

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

        // 4.关闭资源
        socket.close();

    }
}

UDP多发多收

TCP

TCP通信

Socket


java 复制代码
/**
 * 目标:完成TCP通信:实现1发1收
 */
public class Client {
    public static void main(String[] args) throws Exception {
        System.out.println("客户端启动成功!!!");

        // 1.创建客户端对象
        Socket socket = new Socket("127.0.0.1", 8888);

        // 2.从通信管道中获取字节输出流,用来发送数据给服务器
        OutputStream os = socket.getOutputStream();

        // 3.把低级输出流转为数据输出流
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF("在一起,好吗?");


        dos.close();
        // 4.释放资源
        socket.close();
        
    }
}
java 复制代码
/**
 * 目标:TCP服务端开发
 */
public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("服务端启动成功!!!");
        // 1.创建一个服务器对象,绑定8888端口
        ServerSocket ss = new ServerSocket(8888);
        // 2.等待客户端连接
        Socket socket = ss.accept();
        // 3.从通信管道中获取字节输入流,读取数据
        InputStream is = socket.getInputStream();
        // 4.把字节输入流包装成字符输入流
        DataInputStream dis = new DataInputStream(is);

        // 5.读取数据
        String msg = dis.readUTF();
        System.out.println(msg);

        // 获取客户端信息
        System.out.println(socket.getRemoteSocketAddress());


        // 关闭资源
        dis.close();
        socket.close();
    }
}

TCP多发多收

TCP同时接收多个客户端(多线程)


相关推荐
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
暖馒2 小时前
Modbus应用层协议的深度剖析
网络·网络协议·c#·wpf·智能硬件
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble3 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟3 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖4 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
yunfuuwqi4 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云
迎仔4 小时前
C-算力中心网络隔离实施方法:怎么搞?
运维·网络
代码游侠4 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
qq_12498707535 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计