zoukankan      html  css  js  c++  java
  • 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中,建立好连接直接发送即可。

  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/king1302217/p/3222238.html
Copyright © 2011-2022 走看看