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


相关推荐
workflower3 小时前
单元测试-例子
java·开发语言·算法·django·个人开发·结对编程
YuanlongWang3 小时前
C# 基础——装箱和拆箱
java·开发语言·c#
b78gb3 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
wb043072014 小时前
性能优化实战:基于方法执行监控与AI调用链分析
java·人工智能·spring boot·语言模型·性能优化
平生不喜凡桃李5 小时前
Linux网络:UDP
linux·网络·udp
weixiao04305 小时前
Linux网络 网络层
linux·网络·智能路由器
天若有情6735 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
静若繁花_jingjing5 小时前
面试_项目问题_RPC调用异常
网络·网络协议·rpc
lichong9516 小时前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++
lichong9516 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++