UDP通信小结(发送与接收)

12 篇文章 0 订阅
3 篇文章 0 订阅
package com.example.yzb.myapplication;

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 UdpUtils {

    private static final int localport     = 88;//自己本地的端口
    private static final int targetPort    = 90;//目标指定的接收端口
    private static final String targetAddr = "192.168.1.201";//目标IP地址
    private static final int byteSize      = 1024;//byte数组大小

    /**
     * 使用Upd进行发送消息
     * @param data 要发送的数据
     */
    public static void UdpSend(byte[] data){

        try {

            DatagramSocket socket = new DatagramSocket(localport);//若需要制定本地端口发送数据,则在此填入端口号
            DatagramPacket packet = new DatagramPacket(data,data.length, InetAddress.getByName(targetAddr),targetPort);
            socket.send(packet);

        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过Udp接收数据
     * @return
     */
    public static String  UdpReceive(){
        String receiveStr = null;
        try {
            DatagramSocket socket = new DatagramSocket(localport);//如果有指定的接收数据的本地端口,则填入本地端口号;没有则不用
            byte[] buf = new byte[byteSize];
            DatagramPacket packet = new DatagramPacket(buf,buf.length);
            socket.receive(packet);

            receiveStr = new String(buf,0,packet.getLength());//获取接收的数据

        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  receiveStr;

    }

}

★注意事项:

【1】发送:

①DatagramSocket相当于自己家里,构造时,可以填上自家的地址和门牌号。

②DatagramPacket相当于包裹,必须填上接收人(目标)的地址和门牌号。

③发送的data为byte[]类型:

比如: byte[] data = ("你好\r\n").getBytes();//注意字符串末尾要加上\r\n

④ socket.getLocalPort();//获取自己对外的端口号

    socket.getLocalAddress();//获取自己对外的IP地址


【2】接收:

①若需要不断接收数据,则

        while (true){
            socket.receive(packet);
            receiveStr = new String(buf,0,packet.getLength());//获取接收的数据
        }

②packet.getPort();//获取发送方的对外端口

   pacekt.getAddress();//获取发送方对外的IP地址



本文章仅用于记录自己经历和总结,若有不妥之处,请各位指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值