Java 网络编程

本文介绍了Java中的网络编程基础知识,包括IP、端口和数据传输协议的概念。详细展示了UDP和TCP通信的实现,包括发送和接收数据的步骤,并给出了生产者与消费者测试的示例。通过实例代码解释了如何使用Java进行UDP和TCP数据包的发送与接收,帮助读者理解这两种协议的工作原理。
摘要由CSDN通过智能技术生成

目录

一、网络编程概述

1、IP

2、端口

​3、数据传输协议

二、UDP通信程序

1、UDP发送数据 

2、UDP接受数据

3、生产者与消费者测试

三、TCP通信程序

1、TCP发送数据

2、TCP接收数据

3、 生产者与消费者测试


一、网络编程概述

1、IP

在Java中提供了操作IP地址的接口

        //实例化IP对象
        InetAddress address = InetAddress.getByName("localhost");
        //ip名和ip地址都可以,推荐使用ip地址
//        InetAddress address = InetAddress.getByName("127.0.0.1");

        //获取该IP地址的主机名
        String name = address.getHostName();
        //获取该IP地址
        String ip = address.getHostAddress();

        System.out.println("主机名" + name);
        System.out.println("IP地址" + ip);

 运行结果:

2、端口

3、数据传输协议

UDP协议:

TCP协议:

三次握手:

 

二、UDP通信程序

UDP发送数据的基本步骤:

1、UDP发送数据 

 

public class Provider {
    public static void main(String[] args) throws Exception{
        //1、创建发送端的Socket对象(DatagramSocket)
        DatagramSocket ds = new DatagramSocket();

        //2、创建数据,并把数据打包
        //构造一个数据包,发送长度为length的数据包到指定主机上的指定端口号
        byte[] bys = "hello,udp,I'm coming!".getBytes();
//        int length = bys.length;
//        InetAddress address = InetAddress.getByName("localhost");
//        int port = 10086;
//        DatagramPacket dp = new DatagramPacket(bys, length, address, port);
        DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("localhost"), 10086);

        //3、调用DatagramSocket对象的方法发送数据包
        ds.send(dp);

        //4、关闭发送端
        ds.close();
    }
}

2、UDP接受数据

public class Consumer {
    public static void main(String[] args) throws Exception {
        //1、创建接收端的Socket对象(DatagramSocket)
        //构造数据报套接字并将其绑定到本地主机上的指定端口
        DatagramSocket ds = new DatagramSocket(10086);

        //2、创建一个数据包,用于接受数据
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys, bys.length);

        //3、调用DatagramSocket对象的方法接收数据
        ds.receive(dp);

        //4、解析数据包,并把数据在控制台显示
        //返回数据缓存区
        byte[] datas = dp.getData();
        //获取到实际发送过来的数据长度
        int len = dp.getLength();
        String dataString = new String(datas, 0, len);
        System.out.println("数据是:" + dataString);

        //5、关闭接收端
        ds.close();
    }
}

3、生产者与消费者测试

首先先运行消费者对设置的端口进行监听,再运行生产者发送消息:

 可以看到数据接收成功!

三、TCP通信程序

1、TCP发送数据

public class Provider {
    public static void main(String[] args) throws Exception {
        //1、创建Socket对象(Socket)
        //创建流套接字将其连接到指定IP地址的端口号
//        Socket s = new Socket(InetAddress.getByName("localhost"), 10000);
        Socket s = new Socket("localhost", 10000);

        //2、获取输出流,写数据
        //返回此套接字的输出流
        OutputStream os = s.getOutputStream();
        os.write("hello,tcp,I'm coming!".getBytes());

        //3、释放资源
        s.close();
    }
}

2、TCP接收数据

public class Consumer {
    public static void main(String[] args) throws Exception {
        //1、创建服务器端的Socket对象(ServerSocket)
        //创建绑定到指定端口的服务器套接字
        ServerSocket ss = new ServerSocket(10000);

        //2、侦听要连接到此套接字并接收它
        Socket s = ss.accept();

        //3、获取输入流、读数据,并把数据显示在控制台
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String data = new String(bys, 0, len);
        System.out.println("数据是:" + data);

        //4、释放资源
        s.close();
        ss.close();
    }
}

3、 生产者与消费者测试

首先先运行消费者对设置的端口进行监听,再运行生产者发送消息:

  可以看到数据接收成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值