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


相关推荐
fajianchen1 小时前
Spring中观察者模式的应用
java·开发语言
库库林_沙琪马1 小时前
深入理解 @JsonGetter:精准掌控前端返回数据格式!
java·前端
手握风云-1 小时前
JavaEE初阶第一期:计算机是如何 “思考” 的(上)
java·java-ee
国际云,接待1 小时前
微软云注册被阻止怎么解决?
服务器·网络·microsoft·云原生·微软·云计算
普通的冒险者1 小时前
微博项目(总体搭建)
java·开发语言
laocooon5238578861 小时前
基于Python的TCP应用案例,包含**服务器端**和**客户端**的完整代码
网络·python·tcp/ip
BAGAE2 小时前
Flutter 与原生技术(Objective-C/Swift,java)的关系
java·开发语言·macos·objective-c·cocoa·智慧城市·hbase
江湖有缘2 小时前
使用obsutil工具在OBS上完成基本的数据存取【玩转华为云】
android·java·华为云
bxlj_jcj2 小时前
Kafka环境搭建全攻略:从Docker到Java实战
java·docker·kafka
国科安芯2 小时前
【AS32系列MCU调试教程】性能优化:Eclipse环境下AS32芯片调试效率提升
java·性能优化·eclipse