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


相关推荐
脸大是真的好~3 分钟前
计算机408基础相关面试题-备用,不推荐
java
小费的部落4 分钟前
Excel 在Sheet3中 匹配Sheet1的A列和Sheet2的A列并处理空内容
java·前端·excel
咘噜biu5 分钟前
多租户动态数据源插件dynamic-datasource简介
java·mybatisplus·动态数据源·多租户
漫漫求7 分钟前
Java内存模型【JMM】、JVM内存模型
java·开发语言·jvm
原来是好奇心7 分钟前
深入Spring Boot源码(五):外部化配置与Profile机制深度解析
java·源码·springboot
IT界的奇葩7 分钟前
OAuth2 单点登录流程图
java·流程图·oauth2·单点登录·sso
Bruce_Liuxiaowei15 分钟前
SSH主机密钥验证失败(Host key verification failed)深度解析与解决方案
运维·网络·ssh
ZHang......1 小时前
LeetCode 1114. 按序打印
java·开发语言·算法
程序员欣宸1 小时前
LangChain4j实战之四:集成到spring-boot
java·人工智能·spring boot
慧都小项1 小时前
Parasoft Jtest 如何用 JSON 文件驱动Java 测试自动化
java·自动化·json