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同时接收多个客户端(多线程)


相关推荐
折哥的程序人生 · 物流技术专研2 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
sdghterhd2 小时前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议
researcher-Jiang2 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
xy34533 小时前
Wireshark捕获过滤器——语法元素详解
网络·测试工具·渗透测试·wireshark
西门吹-禅4 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_4 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19874 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码4 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
德福危险5 小时前
富有想象力的XSS盲打:靶机练习之Tempus_fugit5
服务器·网络·xss
Hui Baby5 小时前
Spring Security
java·后端·spring