数据包式套接字:基于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();
        }
    }
}