最近在學習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...