UDP、TCP简单使用

UDP

  • 发送数据步骤
    1. 创建发送端的Socket对象(DatagramSocket)
    2. 创建数据,并把数据打包
    3. 调用DatagramSocket对象的方法发送数据
    4. 关闭发送端
    5. 示例如下:
public class UDP_Send {
    public static void main(String[] args) throws IOException {
        //DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
        DatagramSocket ds = new DatagramSocket();

        //构造用于发送长度的分组的数据报包,发送长度为length的数据包到指定主机上到指定的端口号
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        byte[] bytes = "滴滴".getBytes(StandardCharsets.UTF_8);
        InetAddress address = InetAddress.getByName("192.168.137.1");
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, 10086);
        ds.send(dp);
        ds.close();
    }
}
  • 接收数据步骤
    1. 创建接收端的Socket对象(DATa gram Socket)
    2. 创建一个数据包,用于接收数据
    3. 调用DatagramSocket对象的方法接收数据
    4. 解析数据包,并把数据在控制台显示
    5. 关闭接收端
    6. 示例如下:
public class UDP_Receive {
    public static void main(String[] args) throws IOException {
        //DatagramSocket(int port) 构造数据报套接字并将其绑定到本地主机上的指定端口
        DatagramSocket ds = new DatagramSocket(10086);

        //DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket用于接收长度为length的数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        ds.receive(dp);
        //byte[] getData() 返回数据缓冲区
        //int getLength() 返回要发送的数据的长度或接收到的数据的长度
        System.out.println("数据:" + new String(dp.getData(), 0, dp.getLength()));
        ds.close();
    }
}

TCP

  • 发送数据步骤
    1. 创建客户端的Socket对象(Socket)
    2. 获取输出流,写数据
    3. 释放资源
    4. 示例如下:
public class Client_send {
    public static void main(String[] args) throws IOException {
        //Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号
        Socket socket = new Socket("192.168.137.1", 10000);
        System.out.println(socket); //Socket[addr=/192.168.137.1,port=10000,localport=52400]

        //获取输出流,写数据
        //OutputStream getOutputStream() 返回此套接字的输出流
        OutputStream os = socket.getOutputStream();
        os.write("hello tcp,张三到此一游".getBytes());
        os.close();	//可省略
        socket.close();
    }
}
  • 接收数据步骤
    1. 创建服务器端的Socket对象(ServerSocket)
    2. 监听客户端连接,返回一个Socket对象
    3. 获取输入流,读数据,并把数据显示在控制台
    4. 释放资源
    5. 示例如下:
public class Server_receive {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(10000);

        //Socket accept() 侦听要连接到此套接字并接受它
        Socket socket = serverSocket.accept();
        //System.out.println(socket); Socket[addr=/192.168.137.1,port=52400,localport=10000]

        //获取输入流,读数据,并把数据显示在控制台
        InputStream is = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        String str = new String(bytes, 0, len);
        System.out.println("数据是:" + str);
        
        socket.close();
        serverSocket.close();
    }
}

注意事项:当流使用完后,可以使用socket对象shutdownOutputshutdownInput将对应流关闭,防止另一端的流一直等待。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Netty是一种基于Java的网络通信框架,它提供了高度灵活和可扩展的功能,可以用于开发各种类型的网络应用程序。其中,Netty支持TCPUDP两种传输协议。 TCP(Transmission Control Protocol)是一种面向连接的协议,它能够提供可靠的数据传输。TCP通过三次握手建立连接,并通过流量控制和拥塞控制机制来保证数据的可靠性。在使用TCP协议时,数据的传输是一对一的,即每个数据包从发送方到接收方都会经过一个确定的路径。 UDP(User Datagram Protocol)是一种面向无连接的协议,它不保证数据的可靠传输。UDP在数据的发送方和接收方之间建立一个简单的交互,数据包通过广播方式发送,不保证数据包的顺序和完整性。UDP适用于实时性要求较高的应用场景,如音频、视频、游戏等。 在Netty中,无论是TCP还是UDP,都可以通过使用Channel来进行创建和管理。对于UDP来说,Netty提供了DatagramChannel来处理UDP数据包的发送和接收。而对于TCP来说,Netty提供了SocketChannel来处理TCP连接的建立和数据的传输。 Netty使用NIO(Non-blocking I/O)实现网络通信,通过事件驱动机制和高效的线程池来处理网络I/O操作。无论是TCP还是UDP,都可以通过设置相应的ChannelHandler来处理数据的编码、解码、读取和写入操作。 总之,Netty是一种强大的网络通信框架,支持TCPUDP两种传输协议。它提供了丰富的功能和简化的API,可以大大简化网络应用程序的开发和管理。无论是开发高性能服务器还是实时应用程序,Netty都是一个非常好的选择。 ### 回答2: Netty是一个开源的高性能网络应用框架,它支持多种协议,包括UDPTCPUDP(User Datagram Protocol)是一种无连接的传输协议,它在应用层和传输层之间提供了一种简单的、不可靠的传输服务。UDP主要用于传输实时数据,如音频和视频流等,因为它具有较低的延迟和较小的数据包头开销。UDP不保证数据的可靠传输,因此在使用UDP时需要自己处理丢包、乱序等问题。 而TCP(Transmission Control Protocol)是一种面向连接的传输协议,它提供了可靠的、有序的数据传输服务。TCP在应用层和传输层之间建立了一个可靠的、全双工的、面向字节流的连接。TCP通过序号、确认和重传机制等保证了数据的可靠性和有序性。TCP适用于传输对数据完整性要求较高的应用,如网页浏览、文件传输等。 Netty在UDPTCP协议之上提供了统一的编程模型和高度可配置的网络应用框架。它能够有效地处理网络传输中的各种问题,如拆包、粘包、流量控制等。通过使用Netty,开发者可以方便地实现各种基于UDPTCP的网络应用,而无需关注底层网络细节。 总结来说,Netty是一个强大的网络应用框架,它支持UDPTCP等多种协议,并提供了统一的编程模型,使开发者能够更便捷地开发高性能的网络应用。无论是实时的UDP应用还是可靠的TCP应用,Netty都能提供高效、稳定的网络传输服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值