QT 程式設計學習記錄 UDP檔案傳輸

2021-07-16 09:48:14 字數 2372 閱讀 8896

最近在學習qt的網路程式設計,涉及udp這塊,動手寫了乙個基於udp傳輸協議的檔案傳送和接收程式,其中涉及了一些qt控制項的功能,也包含了檔案操作。

udp:是一種無連線,不可靠的傳輸層協議,在傳輸和接收之前不需要握手操作,建立套接字之後,傳送端直接進行檔案的讀取和傳送,而接收端迴圈檢測是否有資料可讀,可讀就讀取資料並寫入新建的檔案。

重點在於套接字的訊號和槽的使用。

主要**如下:

傳送端:

void sendfilewidget::senddata(int port)

else

else

}}void sendfilewidget::on_pushbutton_path_clicked()

void sendfilewidget::on_pushbutton_send_clicked()

bool ok;

my_port = ui->lineedit_port->text().toshort(&ok);

if(!ok)

qstring path = ui->lineedit_path->text();

file =

new qfile(path);

ok = file->open(qiodevice::readonly);

if(!ok)

ui->pushbutton_send->setdisabled(true);

ui->progressbar->setmaximum(file->size());

udpsocket =

new qudpsocket(this);

udpsocket->bind(qhostaddress::localhost, 7754);

connect(udpsocket, signal(readyread()), this, slot(readdata()));

senddata(my_port);

}void sendfilewidget::readdata()

}}

接收端:

void recvfilewidget::on_pushbutton_path_clicked()

void recvfilewidget::on_pushbutton_recv_clicked()

int port;

bool ok;

port = ui->lineedit_port->text().toshort(&ok);

if(!ok)

ui->pushbutton_recv->setdisabled(true);

udpsocket =

new qudpsocket(this);

connect(udpsocket, signal(readyread()),this, slot(slotreaddata()));

ok = udpsocket->bind(qhostaddress::anyipv4, port, qudpsocket::reuseaddresshint);

if(!ok)

file.setfilename(ui->lineedit_path->text());

if(!file.open(qiodevice::writeonly

| qiodevice::unbuffered))

}void recvfilewidget::slotreaddata()

qstring filelength = msgs.at(1);

int filesize = filelength.toint();

ui->progressbar->setmaximum(filesize);

isfilehead =

false;

udpsocket->writedatagram("ok", 2, host, 7754);

continue;

}if(datagram ==

"over")

recvcnt += length;

ui->progressbar->setvalue(recvcnt);

file.write(datagram.

data(),datagram.size());

udpsocket->writedatagram("ok", 2, host, 7754);

ui->listwidget->additem(qstring(datagram));

ui->listwidget->scrolltobottom();

// qdebug() << datagram << " " << host.tostring() << qstring::number(port);

}}

socket程式設計實驗 UDP檔案傳輸

總是說udp不可靠,試試用udp寫了個檔案傳輸工具,順便熟悉一下python的檔案操作。測試一下確實不靠譜,檔案傳輸不穩定。如下 服務端 encoding utf 8 from socket import import os serverport 6666 serversocket socket a...

Qt檔案傳輸小記

傳輸檔案時,簡單的文字檔案可以以字串的形式傳輸。一般的無格式檔案則以二進位制格式傳輸。編寫程式涉及的buffer類有 qfile qbytearray qstring qtcpsocket 如果用其他套接字的話還會用到 char陣列。當傳輸檔案時不可避免取得資料操作,儲存資料型別轉換,寫入資料操作。...

UDP通訊及檔案傳輸

udp通訊 理解幾個名詞 1.datagramsocket 用來傳送和接收資料報的套接字 socket 資料報套接字是包投遞服務的傳送或接收點。每個在資料報套接字上傳送或接收的包都是單獨編址和路由的。從一台機器傳送到另一台機器的多個包可能選擇不同的路由,也可能按不同的順序到達。2.datagramp...