Qt - UDP网络编程

这篇具有很好参考价值的文章主要介绍了Qt - UDP网络编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. QUdpSocket(通信套接字)

UDP(User Datagram Protocol,用户数据报协议)

UDP是一个轻量级、不可靠、面向数据报的、无连接的协议,多用于可靠性要求不严格,不是非常重要的传输。

QUdpSocket类继承自QAbstractSocket,用来发送和接收UDP数据报,”Socket”即套接字,套接字即IP地址+端口号。其中IP地址指定了网络中的一台主机,二端口号则指定了该主机上的一个网络程序,使用套接字即可实现网络上的两个应用程序之间的通信。

QUdpSocket支持IPv4广播,要广播数据报,则只需发送到一个特殊的地址QHostAddress::Broadcast(即255.255.255.255),数据报一般建议发送字节数小于512字节。端口号选择1024-65535(1024以下的常用作保留端口号,如FTP常用端口号21,Telnet常用端口号23,DNS域名服务器常用端口53等)。

1.1 信号

1.2 公有函数

函数

描述

bool hasPendingDatagrams() const

如果至少有一个数据报等待读取,则返回true;否则返回false。

bool joinMulticastGroup(const QHostAddress &groupAddress)

加入操作系统选择的默认接口上groupAddress指定的组播组。套接字必须处于BoundState状态,否则会发生错误。

bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)

这是一个重载函数。在接口上加入组播组地址groupAddress。

bool leaveMulticastGroup(const QHostAddress &groupAddress)

在操作系统选择的默认接口上离开groupAddress指定的组播组。套接字必须处于BoundState状态,否则会发生错误。

bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)

这是一个重载函数。离开接口上指定groupAddress的组播组。

QNetworkInterface multicastInterface() const

返回多播数据报的出接口。这对应于IPv4套接字的IP_MULTICAST_IF套接字选项和IPv6套接字的IPV6_MULTICAST_IF套接字选项。如果之前没有设置接口,这个函数将返回一个无效的qnetworkinterface。套接字必须处于BoundState状态,否则返回无效的QNetworkInterface。

qint64 pendingDatagramSize() const

返回第一个挂起的UDP数据报的大小。如果没有可用的数据报,这个函数返回-1。

qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)

接收不大于maxSize字节的数据报,并将其存储在数据中。发送方的主机地址和端口存储在address和port中(除非指针是0)。成功返回数据报的大小;否则返回1。

QNetworkDatagram receiveDatagram(qint64 maxSize = -1)

接收一个不大于maxSize字节的数据报,并在QNetworkDatagram对象中返回它,以及发送者的主机地址和端口。如果可能,该函数还将尝试确定数据报的目的地址、端口和接收时的跳数。

void setMulticastInterface(const QNetworkInterface &iface)

将组播数据报的出接口设置为当前接口。这对应于IPv4套接字的IP_MULTICAST_IF套接字选项和IPv6套接字的IPV6_MULTICAST_IF套接字选项。套接字必须处于BoundState状态,否则此函数不执行任何操作。

qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

将大小为size的数据报发送到端口上的主机地址。返回成功发送的字节数;否则返回1。

qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

这是一个重载函数。将数据报发送到主机地址和端口。

•从QAbstractSocket继承了37个公共函数,上面有写QAbstractSocket的公有函数

本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓文章来源地址https://www.toymoban.com/news/detail-855434.html

1.3 发送与接收函数

QUdpSocket对于发送数据报文提供了三个重载函数:

qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)//将大小为size的数据报发送到端口上的主机地址。返回成功发送的字节数;否则返回1。
qint64 writeDatagram(const QNetworkDatagram &datagram)
qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

接收消息需要使用Qudpsocket提供的以下函数:

qint64 pendingDatagramSize() const
qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address = Q_NULLPTR, quint16 *port = Q_NULLPTR)//接收不大于maxSize字节的数据报,并将其存储在数据中。发送方的主机地址和端口存储在address和port中(除非指针是0)。成功返回数据报的大小;否则返回1。
QNetworkDatagram receiveDatagram(qint64 maxSize = -1)

1.4 UDP通信流程

2. UDP消息传送的三种模式

单播模式(unicast):一个UDP客户端发送数据报到指定地址和端口的另一UDP客户端,是一对一的数据传输。

组播模式(multicast):UDP客户端加入到另一个组播IP地址的多播组,成员向组播地址发送的数据报,其加入组播的所有成员都可以接收到,类似于QQ群功能。QUdpSocket::joinMulticastGroup()函数实现加入多播组的功能。

广播模式(broadcast):一个UDP客户端发出的数据报,在同一网络范围内其他所有的UDP客户端都可以收到。QUdpSocket支持IPv4广播。需要在数据报中指定接收端地址为QHostAddress::Broadcast,一般的广播地址是255.255.255.255。

在单播、广播和多播模式下,UDP程序都是对等的,不像TCP通信分为客户端和服务端。
TCP通信只有单播模式。UDP通信虽然不能保证数据传输的准确性,但是具有灵活性,一般的即时通信软件都是基于UDP通信的。

QUdpSocket也支持UDP组播。 使用joinMulticastGroup()和leaveMulticastGroup()控制组成员,使用QAbstractSocket::MulticastTtlOption和QAbstractSocket::MulticastLoopbackOption设置TTL和loopback套接字选项。 使用setMulticastInterface()控制组播数据报的出接口,使用multicastInterface()查询出接口。

使用QUdpSocket,您还可以使用connectToHost()建立到UDP服务器的虚拟连接,然后使用read()和write()交换数据报,而不需要为每个数据报指定接收者。

Broadcast Sender、Broadcast Receiver、Multicast Sender和Multicast Receiver示例演示了如何在应用程序中使用QUdpSocket。qt udp,qt,开发语言,c++,udp

2.1 单播

单播(Unicast)是在一个单个的发送者和一个接受者之间通过网络进行的通信。

  • 发送端:

qt udp,qt,开发语言,c++,udp

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QUdpSocket>

class UnicastSender:public QWidget
{
    Q_OBJECT
public:
    UnicastSender(QWidget*parent = nullptr)
    {
        resize(300,100);
        statusLab = new QLabel("没有正在发送的数据报");
        sendBtn = new QPushButton("发送数据");
        auto vlayout = new QVBoxLayout(this);
        vlayout->addWidget(statusLab);
        vlayout->addWidget(sendBtn);

        initSocket();

        connect(sendBtn,&QPushButton::released,this,&UnicastSender::sendDatagram);
    }
    void initSocket()
    {
        udpSoket = new QUdpSocket(this);
        //不需要连接到服务器
    }
    void sendDatagram()
    {
        QByteArray datagram = "数据报:"+QByteArray::number(messageNo);
        //发送数据,需要指定ip地址和端口号
        udpSoket->writeDatagram(datagram,QHostAddress::LocalHost /*QHostAddress("81.70.201.21")*/,8888);
        messageNo++;
    }
private:
    QLabel * statusLab;
    QPushButton* sendBtn;
    int messageNo = 0;
    QUdpSocket *udpSoket;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    UnicastSender sender;
    sender.show();

    return a.exec();
}

//包含moc文件
#include"main.moc"
  • 接受端:qt udp,qt,开发语言,c++,udp
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QUdpSocket>
class UnicastRecevier:public QWidget
{
    Q_OBJECT
public:
    UnicastRecevier(QWidget*parent = nullptr)
    {
        resize(300,100);
        statusLab = new QLabel("没有接受到数据");
        auto vlayout = new QVBoxLayout(this);
        vlayout->addWidget(statusLab);

        initSocket();
    }
    void initSocket()
    {
        udpSoket = new QUdpSocket(this);
        //接收者需要绑定ip地址和端口号
        udpSoket->bind(QHostAddress::LocalHost/*QHostAddress("81.70.201.21")*/,8888);
        connect(udpSoket,&QUdpSocket::readyRead,this,&UnicastRecevier::onReadyread);
    }
    void onReadyread()
    {
        QByteArray datagram;
        QHostAddress host;
        quint16 port;
        //读取数据
        while(udpSoket->hasPendingDatagrams())
        {
            //获取一下下一个数据报的大小
            datagram.resize(udpSoket->pendingDatagramSize());
            //接受
            udpSoket->readDatagram(datagram.data(),datagram.size(),&host,&port);
            //显示
            statusLab->setText(host.toString() +":"+ QString::number(port) +datagram);
        }
    }

private:
    QLabel * statusLab;
    int messageNo = 0;
    QUdpSocket *udpSoket;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    UnicastRecevier sender;
    sender.show();

    return a.exec();
}

//包含moc文件
#include"main.moc"

2.2 多播

多播(Multicast)是一点对多点的通信,IPv6没有采用IPv4中的组播术语,而是将广播看成是多播的一个特殊例子。

多播与单播步骤是一样的,只有IP地址有所区别。

多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0至239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:

  • 1,局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包
  • 2,预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。
  • 3,管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

多播的程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的,其选项值和含义参见11.5所示。

选项

描述

IP_MULTICAST_TTL

设置多播组数据的TTL值

IP_ADD_MEMBERSHIP

在指定接口上加入组播组

IP_DROP_MEMBERSHIP

退出组播组

IP_MULTICAST_IF

获取默认接口或设置接口

IP_MULTICAST_LOOP

禁止组播数据回送

多播程序设计的框架

要进行多播的编程,需要遵从一定的编程框架。多播程序框架主要包含套接字初始化、设置多播超时时间、加入多播组、发送数据、接收数据以及从多播组中离开几个方面。其步骤如下:

(1)建立一个socket。

(2)然后设置多播的参数,例如超时时间TTL、本地回环许可LOOP等。

(3)加入多播组。

(4)发送和接收数据。

(5)从多播组离开。

  • 发送端:qt udp,qt,开发语言,c++,udp
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QUdpSocket>

class MulticastSender:public QWidget
{
    Q_OBJECT
public:
    MulticastSender(QWidget*parent = nullptr)
    {
        resize(300,100);
        statusLab = new QLabel("没有正在发送的数据报");
        sendBtn = new QPushButton("发送数据");
        auto vlayout = new QVBoxLayout(this);
        vlayout->addWidget(statusLab);
        vlayout->addWidget(sendBtn);

        initSocket();

        connect(sendBtn,&QPushButton::released,this,&MulticastSender::sendDatagram);
    }
    void initSocket()
    {
        udpSoket = new QUdpSocket(this);
        //不需要连接到服务器
    }
    void sendDatagram()
    {
        QByteArray datagram = "数据报:"+QByteArray::number(messageNo);
        //发送数据,需要指定ip地址和端口号,组播ip地址范围:224.0.0.0 - 239.255.255.255
        udpSoket->writeDatagram(datagram,QHostAddress("239.255.255.255"),8887);
        messageNo++;
    }
private:
    QLabel * statusLab;
    QPushButton* sendBtn;
    int messageNo = 0;
    QUdpSocket *udpSoket;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MulticastSender sender;
    sender.show();

    return a.exec();
}

//包含moc文件
#include"main.moc"
  • 接受端:
  • qt udp,qt,开发语言,c++,udp

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QUdpSocket>

class MulticastRecevier:public QWidget
{
    Q_OBJECT
public:
    MulticastRecevier(QWidget*parent = nullptr)
    {
        resize(300,100);
        statusLab = new QLabel("没有接受到数据");
        auto vlayout = new QVBoxLayout(this);
        vlayout->addWidget(statusLab);

        initSocket();
    }
    void initSocket()
    {
        udpSoket = new QUdpSocket(this);
        //接收者需要绑定ip地址和端口号,允许端口和ip重用,多个socket绑定同一ip和端口
        udpSoket->bind(QHostAddress::AnyIPv4,8887,QUdpSocket::BindFlag::ShareAddress | QUdpSocket::BindFlag::ReuseAddressHint);
        //多播是分组的,加入一个指定组
        udpSoket->joinMulticastGroup(QHostAddress("239.255.255.255"));

        connect(udpSoket,&QUdpSocket::readyRead,this,&MulticastRecevier::onReadyread);
    }
    void onReadyread()
    {
        QByteArray datagram;
        QHostAddress host;
        quint16 port;
        //读取数据
        while(udpSoket->hasPendingDatagrams())//hasPendingDatagrams()如果至少有一个数据报等待读取,则返回true;
        {
            //获取一下下一个数据报的大小
            datagram.resize(udpSoket->pendingDatagramSize());//pendingDatagramSize()返回第一个挂起的UDP数据报的大小。
            //接受
            udpSoket->readDatagram(datagram.data(),datagram.size(),&host,&port);
            //显示
            statusLab->setText(host.toString() +":"+ QString::number(port) +datagram);
        }
    }

private:
    QLabel * statusLab;
    int messageNo = 0;
    QUdpSocket *udpSoket;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MulticastRecevier sender;
    sender.show();

    return a.exec();
}

//包含moc文件
#include"main.moc"

测试效果:qt udp,qt,开发语言,c++,udp

2.3 广播

广播(broadcast)是一点到所有点的通信方式。

广播与组播是一样的,只是ip地址有所不同,而且不用加入指定的组。单播的数据只是收发数据的特定主机进行处理,组播在特定组之间进行处理,而广播的数据整个局域网都进行处理。

“广播”可以理解为一个人通过广播喇叭对在场的全体说话,这样做的好处是通话效率高,信息一下子就可以传递到全体。

“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。

在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

  • 发送端:qt udp,qt,开发语言,c++,udp
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QUdpSocket>

class BroadcastSender:public QWidget
{
    Q_OBJECT
public:
    BroadcastSender(QWidget*parent = nullptr)
    {
        resize(300,100);
        statusLab = new QLabel("没有正在发送的数据报");
        sendBtn = new QPushButton("发送数据");
        auto vlayout = new QVBoxLayout(this);
        vlayout->addWidget(statusLab);
        vlayout->addWidget(sendBtn);

        initSocket();

        connect(sendBtn,&QPushButton::released,this,&BroadcastSender::sendDatagram);
    }
    void initSocket()
    {
        udpSoket = new QUdpSocket(this);
        //不需要连接到服务器
    }
    void sendDatagram()
    {
        QByteArray datagram = "数据报:"+QByteArray::number(messageNo);
        //发送数据,需要指定ip地址和端口号
        udpSoket->writeDatagram(datagram,QHostAddress::Broadcast,8886);
        messageNo++;
    }
private:
    QLabel * statusLab;
    QPushButton* sendBtn;
    int messageNo = 0;
    QUdpSocket *udpSoket;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    BroadcastSender sender;
    sender.show();

    return a.exec();
}

//包含moc文件
#include"main.moc"
  • 接受端:qt udp,qt,开发语言,c++,udp
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QUdpSocket>

class BroadcastRecevier:public QWidget
{
    Q_OBJECT
public:
    BroadcastRecevier(QWidget*parent = nullptr)
    {
        resize(300,100);
        statusLab = new QLabel("没有接受到数据");
        auto vlayout = new QVBoxLayout(this);
        vlayout->addWidget(statusLab);

        initSocket();
    }
    void initSocket()
    {
        udpSoket = new QUdpSocket(this);
        //接收者需要绑定ip地址和端口号
        udpSoket->bind(QHostAddress::Any,8886,QUdpSocket::BindFlag::ShareAddress | QUdpSocket::BindFlag::ReuseAddressHint);

        connect(udpSoket,&QUdpSocket::readyRead,this,&BroadcastRecevier::onReadyread);
    }
    void onReadyread()
    {
        QByteArray datagram;
        QHostAddress host;
        quint16 port;
        //读取数据
        while(udpSoket->hasPendingDatagrams())//hasPendingDatagrams()如果至少有一个数据报等待读取,则返回true;
        {
            //获取一下下一个数据报的大小
            datagram.resize(udpSoket->pendingDatagramSize());//pendingDatagramSize()返回第一个挂起的UDP数据报的大小。
            //接受
            udpSoket->readDatagram(datagram.data(),datagram.size(),&host,&port);
            //显示
            statusLab->setText(host.toString() +":"+ QString::number(port) +datagram);
        }
    }
private:
    QLabel * statusLab;
    int messageNo = 0;
    QUdpSocket *udpSoket;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    BroadcastRecevier sender;
    sender.show();

    return a.exec();
}

//包含moc文件
#include"main.moc"

测试效果:qt udp,qt,开发语言,c++,udp

文章转自博客园(BORUTO):Qt - UDP网络编程 - [BORUTO] - 博客园

本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓

到了这里,关于Qt - UDP网络编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT网络编程之实现UDP广播发送和接收

    一.UDP广播介绍 UDP广播地址固定IP地址为:XXX.XXX.XXX.255。 如果向全网段发送广播消息,那么广播地址为:255.255.255.255; 如果向单个网段发送广播消息,例如你的IP是192.168.31.104,那么广播地址为192.168.31.255。 广播消息接收方需要绑定0.0.0.0地址并监听指定端口即可收到广播的群

    2024年03月25日
    浏览(67)
  • Go语言实战:网络编程与TCP_UDP

    Go语言是一种现代的编程语言,由Google的Robert Griesemer、Rob Pike和Ken Thompson于2009年开发。Go语言的设计目标是简单、高效、可扩展和易于使用。它具有垃圾回收、类型安全、并发性能等优点。Go语言的网络编程库 net 包提供了TCP/UDP的实现,使得开发者可以轻松地编写网络应用程序

    2024年02月21日
    浏览(66)
  • 初学记录【linux应用】 TCP/UDP 网络编程 C语言

    以下内容分别为TCP 与 UDP编程,内容有相似或者重合部分,可根据流程 相互对照学习,都已经附上源码 。 **1.** socket 创建 tcp套接字 (监听的套接字) 2、IPv4套接字地址结构 #include netinet/in.h struct in_addr: 如果使用 Internet 所以 sin_family 一般为 AF_INET。 ⚫ sin_addr 设置为 INADDR_AN

    2024年02月03日
    浏览(65)
  • C++开发基础之网络编程WinSock库使用详解TCP/UDP Socket开发

    Winsock是Windows操作系统提供的用于网络编程的API库。它是Windows Sockets的简称,也就是套接字库。Winsock可以让开发人员使用TCP/IP协议族中的各种协议,如TCP、UDP等,在Windows平台下进行网络编程。 Winsock提供了一组函数和数据结构,这些函数和数据结构可以让开发人员创建和管理

    2024年01月23日
    浏览(51)
  • 【Linux C | 网络编程】多播的概念、多播地址、UDP实现多播的C语言例子

    😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 🤣本文内容🤣:🍭介绍多播的概念、多播地址、UDP实现广播的C语言例子 🍭 😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

    2024年03月11日
    浏览(54)
  • 网络编程——UDP编程

    在C语言中进行UDP编程的一般步骤如下: (1) 包含头文件 : 在代码中包含必要的头文件,以便使用UDP编程所需的函数和数据类型。通常情况下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 创建套接字 : 使用 socket() 函数创建一个套接字,该套接字将用于网络通信

    2024年02月05日
    浏览(41)
  • 【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

            Qt 网络模块为我们提供了编写TCP/IP客户端和服务器的类。它提供了较低级别的类,例如代表低级网络概念的 QTcpSocket,QTcpServer 和 QUdpSocket,以及诸如 QNetworkRequest, QNetworkReply 和 QNetworkAccessManager 之类的高级类来执行使用通用协议的网络操作。它 还提供了诸如QNet

    2024年02月16日
    浏览(57)
  • 【socket】从计算机网络基础到socket编程——Windows && Linux C语言 + Python实现(TCP+UDP)

    简单讲一下基础知识,便于后面代码的理解,建议大概浏览一下这一小节内容。这里讲的只是冰山一角,建议大家学习计算机网络相关知识,推荐几本书: 《计算机网络》(谢希仁) 《计算机网络 自顶向下方法》 《计算机网络技术》 《计算机网络基础及应用》 《Linux C从入

    2024年02月08日
    浏览(60)
  • Linux网络编程——UDP编程

    1、UDP通信协议,服务器端和客户端无需建立连接,只需要知道对方套接字的地址信息就可以发送数据 2、UDP通信流程图: 功能:创建套接字并返回套接字描述符 功能:将套接字与IP地址和端口号绑定 功能:发送数据 功能:接收数据 功能:关闭套接字 1、代码功能:两个进程

    2023年04月19日
    浏览(46)
  • 网络编程 p5 UDP编程

    基本介绍 类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。 UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。 DatagramPacket对象封装了UDP数据报, 在数据报中包含了发送端的IP地址和端口号

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包