• Java UDP网络编程


           UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍

    服务端:    

    package wyf;
    
    import java.io.*;
    import java.net.*;
    
    public class UdpServer {
        public static void main(String[] args) throws IOException {
            //新建一个DatagramSocket
            DatagramSocket server = new DatagramSocket(5050);
            
            //接收客户端发送来的消息
            byte[] recvBuf = new byte[100];
            DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length);
            server.receive(recvPacket);
            String recvStr = new String(recvPacket.getData(), 0, recvPacket    .getLength());
            System.out.println("客户端传来消息:" + recvStr);
            
            //往客户端发送消息
            int port = recvPacket.getPort();
            InetAddress addr = recvPacket.getAddress();
            String sendStr = "Hello ! I'm Server";
            byte[] sendBuf;
            sendBuf = sendStr.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length,addr, port);
            server.send(sendPacket);
            
            //关闭DatagramSocket
            server.close();
        }
    }

    客户端:

    package wyf;
    
    import java.io.*;
    import java.net.*;
    
    public class UdpClient {
        public static void main(String[] args) throws IOException 
        {
            //新建一个DatagramSocket
            DatagramSocket client = new DatagramSocket();
    
            //往服务端发送消息
            String sendStr = "Hello! I'm Client";
            byte[] sendBuf;
            sendBuf = sendStr.getBytes();
            InetAddress addr = InetAddress.getByName("127.0.0.1");
            int port = 5050;
            DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length,    addr, port);
            client.send(sendPacket);
            
            //接受服务端传来的消息
            byte[] recvBuf = new byte[100];
            DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length);
            client.receive(recvPacket);
            String recvStr = new String(recvPacket.getData(), 0,
                    recvPacket.getLength());
            System.out.println("服务端传来消息:" + recvStr);
            
            //关闭DatagramSocket
            client.close();
        }
    }

    服务端启动后,会接收客户端传来的消息,然后往客户端发送一条消息,服务端输出如下:
    客户端传来消息:Hello! I'm Client 

    客户端启动后,会首先往服务端发送一掉消息,然后接收服务端发送的消息,客户端输出如下:

    服务端传来消息:Hello ! I'm Server

    备注:

          可以看到,Java UDP编程,服务端和客户端的流程都是一致的,首先申请一个DatagramSocket,接收数据使用DatagramSocket.receive(),发送数据使用DatagramSocket.send(),关闭连接使用DatagramSocket.close()。

          与TCP/IP通讯不同,UDP编程中并没有服务端和客户端的概念,服务端和客户端的代码其实都是一致的。TCP/IP是面向连接的,而UDP是非面向连接的。因此,UDP发送数据时,要将数据包和发送的IP、端口都要放到DatagramPacket中进行发送,不像TCP/IP中,建立好连接直接发送即可。

  • 相关阅读:
    docker 原理之 mount namespace(下)
    docker 原理之 namespace (上)
    十种世界顶级思维方式
    Go 标准库 net
    斐波拉契序列的 Go 实现
    channel 是怎么走上死锁这条路的
    hello world 的并发实现
    使用链表和切片实现栈和队列
    非暴力沟通-读后感
    CCS
  • 原文地址:https://www.cnblogs.com/king1302217/p/3222238.html
Copyright © 2020-2023  润新知