zoukankan      html  css  js  c++  java
  • 数据包式套接字:基于UDP协议的Socket网络编程

    一、原理

    1.利用DatagramPacket封装数据包;

    2.利用DatagramSocket发送数据包;

    3.利用DatagramSocket接收数据包;

    4.利用DatagramPacket处理数据包。

    二、步骤

    1.发送数据包

    a.使用DatagramSocket()创建一个数据包套接字;

    b.使用DatagramPacket(byte[] infos, int offset, int length, InetAddress address, port)创建要发送的数据包;

    c.使用DataSocket类的send()方法发送数据包。

    2.接收数据包

    a.使用DatagramSocket(int port)创建数据包套接字,绑定到指定端口;

    b.使用DatagramPacket(byte[] infos, int length)创建字节数组接收数据包;

    c.使用DatagramSocket类的receive()方法接收UDP包。

    代码示例:

    客户端(发送数据包)

    package com.yh.mySocketUDP;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    
    public class LoginClient {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String info = "基于UDP协议的的Socket网络编程";
            byte[] infos = info.getBytes();
            try {
    
                // 创建数据包套接字
                DatagramSocket ds = new DatagramSocket();
                // 构建数据包对象
                InetAddress is = InetAddress.getByName("localhost");
                DatagramPacket dp = new DatagramPacket(infos,0,infos.length,is,5000);
                // 发送数据包
                ds.send(dp);
                ds.close();
    
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    服务器(接收数据包)

    package com.yh.mySocketUDP;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class LoginServer {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try {
    
                // 创建数据包套接字
                DatagramSocket ds = new DatagramSocket(5000);
                // 创建字节数组接收数据包套接字
                byte[] infos = new byte[1024];
                DatagramPacket dp = new DatagramPacket(infos,infos.length);
                // 接收UDP包,放在dp中
                ds.receive(dp);
                String info = new String(dp.getData(),0,dp.getData().length);
                System.out.println(info);
                ds.close();
    
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    记录某次应急演练
    C++之分文件编写
    C++之冒泡排序实现
    cobaitstrike之修改特征
    cobaitstrike之DNS上线
    网盘搜索【不断更新ing】
    CVE-2021-2109 Weblogic Server远程代码执行
    C++之一维&二维数组
    CDH-5.12.2安装教程
    linux安装mysql教程
  • 原文地址:https://www.cnblogs.com/YeHuan/p/10793230.html
Copyright © 2011-2022 走看看