UDP程序

一,UDPclient往UDPserver传送数据
(1),UDPserver程序建立过程
1,socket()函数————创建通信端点
参数:1,通信域,建立通信协议族 2,数据报套接字类型 3,具体的协议类型,一般前两个参数已经把协议确定下来,为0就好;
2,bind()————绑定服务端口
参数:1,套接口描述符 2,服务端地址 3,服务端结构体函数字节大小
3,recvfrom()————接受客户端信息
参数:1,套接口描述符 2,数组 3,数组大小 4,标志位为0 5,客户端地址 6,客户端结构体字节大小

二,UDPclient往UDPserver传送文件
注意:UDPclient 和UDPserver程序一定不要放在同一个目录下,因为在传送过程会出错;联想一下windows文件目录下相同的文件能从本目录再次传送到本目录下吗??答案是不可以!!! 还有打算要传送的文件一定是在本目录下一定要存在。

基本的过程:
客户端 ——————————————— 服务器
1,发送文件名 ——————————1,接受文件名,并创建文件
2,打开文件———————————2,打开文件
3,read数据,发送数据——————3,接受数据,write数据
4,read完毕,发送"bye" ————— 4,收到"bye",关闭文件

(1)客户端client
1,sendto()————发送文件
参数:1,套接口描述符 2,数组 3,数组大小 4,标志位为0 5,服务端地址 6,服务端结构体字节大小
2,open()——————打开文件
参数:1,文件名 2,只读的方式打开
3,read()————读文件
参数:1,文件描述符 fd 2,数组buf 3,数组大小
从buf中往fd中读sizeof(buf)字节

(2)服务端server
1,socket()函数————创建通信端点
参数:1,通信域,建立通信协议族 2,数据报套接字类型 3,具体的协议类型,一般前两个参数已经把协议确定下来,为0就好;
2,recvfrom()————接受客户端文件名
参数:1,套接口描述符 2,数组 3,数组大小 4,标志位为0 5,客户端地址 6,客户端结构体字节大小
3,open()——————打开文件,(有则打开,无则创建)
参数:1,文件名 2,只写的方式打开,3,权限为00700,
4,write()————写数据
参数:1,文件描述符fd 2,数组buf 3,数组大小
从fd中往buf中写sizeof(buf)字节

### QML编写UDP程序示例 在Qt框架内,尽管QML主要用于构建用户界面并通过JavaScript实现逻辑控制,但通过C++扩展或利用`QtNetwork`模块中的类也可以完成网络通信任务。对于UDP协议的支持,通常会涉及到`QUdpSocket`类的应用。下面展示了一个简单的例子来说明如何创建一个基于QMLC++的UDP客户端。 #### C++部分 (udpclient.h) ```cpp #ifndef UDPCLIENT_H #define UDPCLIENT_H #include <QObject> #include <QUdpSocket> class UdpClient : public QObject { Q_OBJECT public: explicit UdpClient(QObject *parent = nullptr); signals: public slots: void sendMessage(const QString &message); }; #endif // UDPCLIENT_H ``` #### C++部分 (udpclient.cpp) ```cpp #include "udpclient.h" UdpClient::UdpClient(QObject *parent) : QObject(parent), socket(new QUdpSocket(this)) {} void UdpClient::sendMessage(const QString &message) { QByteArray datagram; QDataStream out(&datagram, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_6_0); // 设置数据流版本以匹配目标平台[^3] out << message; socket->writeDatagram(datagram, QHostAddress("127.0.0.1"), // 发送至本地回环地址 45454); // 使用指定端口发送消息 } ``` 为了使上述C++代码能够在QML环境中调用,在应用程序初始化阶段需注册此类型: ```cpp qmlRegisterType<UdpClient>("com.example", 1, 0, "UdpClient"); ``` 之后可以在QML文件里像这样实例化并使用这个组件: #### QML部分 (main.qml) ```qml import QtQuick 2.15 import com.example 1.0 ApplicationWindow { visible: true width: 640 height: 480 UdpClient { id: udp } Button { text: qsTr("Send Message") onClicked: { udp.sendMessage("Hello from QML!"); } } } ``` 以上展示了基本结构以及如何结合QML与底层C++功能来进行UDP通讯的方法。需要注意的是实际项目可能还需要考虑错误处理、异步操作等问题[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值