基于QT的局域網(wǎng)聊天室課程設(shè)計文檔_第1頁
基于QT的局域網(wǎng)聊天室課程設(shè)計文檔_第2頁
基于QT的局域網(wǎng)聊天室課程設(shè)計文檔_第3頁
基于QT的局域網(wǎng)聊天室課程設(shè)計文檔_第4頁
基于QT的局域網(wǎng)聊天室課程設(shè)計文檔_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

課程設(shè)計報告題目:基于QT的局域網(wǎng)聊天室—UI界面和消息發(fā)送、接收模塊課程名稱:嵌入式系統(tǒng)應(yīng)用開發(fā)院部名稱:計算機工程學(xué)院專業(yè):計算機科學(xué)與技術(shù)班級:計算機科學(xué)與技術(shù)(2)班

課程設(shè)計書寫要求課程設(shè)計報告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。課程設(shè)計報告書寫說明課程設(shè)計報告應(yīng)包含一下七部分內(nèi)容:1、摘要2、目錄3、前言/引言4、正文5、結(jié)論、6、參考文獻(xiàn)7、附錄,每部分的書寫要求參見具體條目要求。填寫注意事項(1)準(zhǔn)確說明,層次清晰。(2)盡量采用專用術(shù)語來說明事物。(3)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(4)應(yīng)獨立完成實驗報告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。課程設(shè)計報告批改說明實驗報告的批改要及時、認(rèn)真、仔,細(xì)一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。實驗報告裝訂要求實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。

課程設(shè)計題目:基于QT的局域網(wǎng)聊天室—UI界面和消息發(fā)送、接收模塊一、摘要嵌入式系統(tǒng)是軟件和硬件的綜合體,嵌入式系統(tǒng)是與應(yīng)用緊密結(jié)合的,具有很強專用性,必須結(jié)合實際系統(tǒng)需求進行合理的裁減利用。嵌入式在電子行業(yè)的應(yīng)用很廣泛,學(xué)習(xí)嵌入式顯得非常重要。這次課程設(shè)計的主要目的是檢驗學(xué)習(xí)qt軟件后的效果。通過基礎(chǔ)題的代碼編寫,熟悉C++語言編程技巧。通過完成聊天程序的設(shè)計,熟悉嵌入式底層編程。利用QT設(shè)計界面,縮短開發(fā)時間。關(guān)鍵字:嵌入式、tcpSOCKET、QT軟件1

金陵科技學(xué)院課程設(shè)計報告二、目錄一、摘要...........................................................1二、目錄............................................................2三、前言/引言.......................................................3四、正文............................................................44.1原理與關(guān)鍵技術(shù)..............................................44.1.1條件與限制.............................................44.1.2開發(fā)環(huán)境說明...........................................44.1.3運行環(huán)境說明...........................................44.1.4設(shè)計思路的分析和可行性.................................44.1.5信號和槽機制...........................................44.1.6聊天平臺的設(shè)計思想.....................................54.1.7技術(shù)路線...............................................54.2系統(tǒng)的總體設(shè)計..............................................64.2.1界面設(shè)計...............................................64.2.2服務(wù)器端的設(shè)計.........................................74.2.3客戶端的設(shè)計...........................................84.3各個模塊的具體實現(xiàn)過程4.3.1主界面設(shè)計主要代碼分析.................................94.3.2服務(wù)器端主要程序代碼分析..............................114.3.3客戶端主要程序代碼分析................................12.......................................9五、結(jié)論...........................................................14六、參考文獻(xiàn).......................................................15七、附錄...........................................................162

金陵科技學(xué)院課程設(shè)計報告三、前言/引言局域網(wǎng)聊天工具,是在局域網(wǎng)內(nèi)部使用的,用戶之間用來交流的一個工具,一般都具有文本聊天和文件傳輸功能。局域網(wǎng)聊天軟件因其使用簡單,系統(tǒng)資源消耗少等優(yōu)點,成為各企事業(yè)單位等的局域網(wǎng)內(nèi)廣泛應(yīng)用的軟件之一。隨著中小型企事業(yè)的不斷發(fā)展,在企業(yè)內(nèi)部實現(xiàn)局域網(wǎng)通信是必不可少的,隨之出現(xiàn)了企業(yè)即時通訊,它是一種面向企業(yè)終端使用者的網(wǎng)絡(luò)溝通工具服務(wù),使用者可以通過安裝了即時通信的終端機進行兩人或多人之間的實時溝通。交流內(nèi)容包括文字、界面、語音、視頻及文件互發(fā)等。3

金陵科技學(xué)院課程設(shè)計報告四、正文4.1原理與關(guān)鍵技術(shù)4.1.1條件與限制本系統(tǒng)為普通聊天系統(tǒng),主要是局域網(wǎng)內(nèi)成員使用,要求界面簡潔,操作簡單,以處理事物為核心,保證程序的可靠性。本系統(tǒng)處理數(shù)據(jù)量有限,適用于局域網(wǎng)用戶,但性能良好,能滿足局域網(wǎng)成員的基本需求??梢詰?yīng)對各種由于系統(tǒng)產(chǎn)生的錯誤,比如信息發(fā)送失敗,不能接收信息等,要求盡可能多的預(yù)防此類事件的發(fā)生,并準(zhǔn)備好應(yīng)對措施和向用戶提供提示信息。要保證程序有一定的容錯性,當(dāng)用戶進行非法操作或系統(tǒng)本身出現(xiàn)錯誤時要能以合理的方式退出程序。4.1.2開發(fā)環(huán)境說明1.編程語言:C++2.操作系統(tǒng):windowsxp32位系統(tǒng)3.開發(fā)平臺:QTcreator4.1.3運行環(huán)境說明1.CPU:酷睿i52.內(nèi)存:2GB3.硬盤:500G4.操作系統(tǒng):windowsxp32位系統(tǒng)4.1.4設(shè)計思路的分析和可行性本如軟件采用服務(wù)器和客戶端的形式。服務(wù)器負(fù)責(zé)監(jiān)聽客戶端和接收客戶端發(fā)送過來的信息,并在顯的同時,通過網(wǎng)絡(luò)實時發(fā)往服務(wù)器消息,并獲取最新客戶端發(fā)送的消息。網(wǎng)絡(luò)編程技術(shù)的成熟和界面設(shè)計技示在界面上??蛻舳藙t向服務(wù)端發(fā)送信息,在本地呈現(xiàn)。用戶在服務(wù)器器上也可以看見客戶端發(fā)送的術(shù)使得客戶端與服務(wù)端通信的設(shè)計成為可能,而且此軟件同過設(shè)置IP是聊天通信更為方便。4.1.5信號和槽機制4

金陵科技學(xué)院課程設(shè)計報告信號:當(dāng)對象改變其狀態(tài)時,信號就由該對象發(fā)射(emit)出去,而且對象只負(fù)責(zé)發(fā)送信號,它不知道另一端是誰在接收這個信號。這樣就做到了真正的信息封裝,能確保對象被當(dāng)作一個真正的軟件組件來使用。槽:用于接收信號,而且槽只是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接。而且對象并不了解具體的通信機制。信號與槽的連接:所有從QObject或其子類(例如Qwidget)派生的類都能夠包含信號和槽。因為信號與槽的連接是通過QObject的connect()成員函數(shù)來實現(xiàn)的。4.1.6聊天平臺的設(shè)計思想本系統(tǒng)采用服務(wù)器和客戶端的形式。服務(wù)器主要模擬服務(wù)器的控制端,來對客戶端的各種狀態(tài)進行監(jiān)聽。可以通過網(wǎng)絡(luò)向客戶端發(fā)送信息,并接受客戶端傳來的信息,供用戶參考。自己狀態(tài)的同時,通過網(wǎng)絡(luò)客戶端主要通過IP連接服務(wù)器。客戶端在顯示實時將自己的狀態(tài)發(fā)送到服務(wù)器端。4.1.7技術(shù)路線UDP協(xié)議:UDP是UserDatagramProtocol的簡稱,中文名是用戶數(shù)據(jù)報協(xié)議,是OSI(OpenSystemInterconnection,開放式系統(tǒng)互聯(lián))參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù),IETFRFC768是UDP的正式規(guī)范。UDP協(xié)議的全稱是用戶數(shù)據(jù)報協(xié)議[1],在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進行排序的缺點,也就是說,當(dāng)報文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。UDP用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天UDP仍然不失為一項非常實用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。UDP協(xié)議的主作要用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個典型的數(shù)5

金陵科技學(xué)院課程設(shè)計報告據(jù)包就是一個二進制數(shù)據(jù)的傳輸單位。每一個數(shù)據(jù)包的前8個字節(jié)用來包含報頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。TCP協(xié)議:TCP(TransmissionControlProtocol傳輸控制協(xié)議)是一種面向連接(連接導(dǎo)向)的、可靠的、基于IP的傳輸層協(xié)議,由IETF的RFC793說明(specified)。TCP/IP(TransmissionControlProtocol/InternetProtocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個工業(yè)標(biāo)準(zhǔn)的協(xié)議集,它是為廣域網(wǎng)(WAN)設(shè)計的。它是由ARPANET網(wǎng)的研究機構(gòu)發(fā)展起來的。TCP/IP的標(biāo)準(zhǔn)在一系列稱為RFC的文檔中公布。文檔由技術(shù)專家、特別工作組、或RFC編輯修訂。公布一個文檔時,該文檔被賦予一個RFC編號,如RFC959(FTP的說明文檔)、RFC793(TCP的說明文檔)、RFC791(IP的說明文檔)等。最初的RFC一直保留而從來不會被更新,如果修改了該文檔,則該文檔又以一個新號碼公布。因此,重要的是要確認(rèn)你擁有了關(guān)于某個專題的最新RFC文檔。通常在RFC的開頭部分,有相關(guān)RFC的更新(update)、修改(errata)、作廢(obsolete)信息,提示讀者信息的時效性。TCP與UDP的區(qū)別:1.TCP協(xié)議面向連接,UDP協(xié)議面向非連接;2.TCP協(xié)議傳輸速度慢,UDP協(xié)議傳輸速度快3.TCP有丟包重傳機制,UDP沒有;4.TCP協(xié)議保證數(shù)據(jù)正確性,UDP協(xié)議可能丟包4.2系統(tǒng)的總體設(shè)計4.2.1界面設(shè)計6

金陵科技學(xué)院課程設(shè)計報告圖1主界面軟件左邊那大塊是聊天內(nèi)容顯示界面,這里局域網(wǎng)相當(dāng)于qq中的qq群,即群聊。該程序?qū)崿F(xiàn)的是每個用戶登錄既是客戶端又是服務(wù)器端,這就需要看你站在哪個角度看問題了。簡單的說,當(dāng)用戶發(fā)送信息給別人時就是客戶端,當(dāng)接收別人的信息是就可以看做是服務(wù)器端。4.2.2服務(wù)器端的設(shè)計圖2發(fā)送文件界面7

金陵科技學(xué)院課程設(shè)計報告服務(wù)器端界面主要如圖所示,包括界面部分和控制部分。界面執(zhí)行顯示功能,包括打開、發(fā)送、關(guān)閉功能。發(fā)送端流程:圖3發(fā)送端流程4.2.3客戶端的設(shè)計圖4接收文件界面客戶端界面如圖所示,采用的是界面驅(qū)動的方式??蛻舳擞凶约旱拇翱冢?

金陵科技學(xué)院課程設(shè)計報告可以單獨向服務(wù)器端發(fā)送狀態(tài)信息。客戶端主要包括發(fā)送和清除當(dāng)前信息的功能呢,還有通過IP連接服務(wù)器的功能??蛻舳说慕缑骓憫?yīng)用戶的操作時,可以向服務(wù)器報告自己的信息??蛻舳艘矔⒈匾男畔⒍〞r報告給服務(wù)器。接收端流程:圖5接收端流程4.3各個模塊的具體實現(xiàn)過程4.3.1主界面設(shè)計主要代碼分析//接收UDP信息voidWidget::processPendingDatagrams(){//hasPendingDatagrams返回true時表示至少有一個數(shù)據(jù)報在等待被讀取while(udpSocket->hasPendingDatagrams())9

金陵科技學(xué)院課程設(shè)計報告{QByteArraydatagram;//pendingDatagramSize為返回第一個在等待讀取報文的size,resize函數(shù)是把datagram的size歸一化到參數(shù)size的大小一樣datagram.resize(udpSocket->pendingDatagramSize());//將讀取到的不大于datagram.size()大小數(shù)據(jù)輸入到datagram.data()中,datagram.data()返回的是一個字節(jié)數(shù)組中存儲//數(shù)據(jù)位置的指針udpSocket->readDatagram(datagram.data(),datagram.size());QDataStreamin(&datagram,QIODevice::ReadOnly);//因為其屬性為只讀,所以是輸入intmessageType;//此處的int為qint32,在Qt中,qint8為char,qint16為uintin>>messageType;//讀取1個32位長度的整型數(shù)據(jù)到messageTyep中QStringuserName,localHostName,ipAddress,message;QStringtime=QDateTime::currentDateTime()將當(dāng)前的時間轉(zhuǎn)化到括號中的形式switch(messageType){caseMessage://in>>后面如果為Qstring,則表示讀取一個直到出現(xiàn)的字符串in>>userName>>localHostName>>ipAddress>>message;ui->messageBrowser->setTextColor(Qt::blue);//設(shè)置文本顏色設(shè)置字體大小輸出的格式為用戶名加時間顯示//輸出的格式為主機名加時間顯示,但輸出完后為什么會自動換行呢?ui->messageBrowser->append(message);//消息輸出break;caseNewParticipant:in>>userName>>localHostName>>ipAddress;newParticipant(userName,localHostName,ipAddress);break;10

金陵科技學(xué)院課程設(shè)計報告caseParticipantLeft:in>>userName>>localHostName;participantLeft(userName,localHostName,time);break;caseFileName:break;caseRefuse:break;}}}4.3.2服務(wù)器端主要程序代碼分析//開始發(fā)送數(shù)據(jù)voidTcpServer::sendMessage()//是connect中的槽函數(shù){ui->serverSendBtn->setEnabled(false);//當(dāng)在傳送文件的過程中,發(fā)送按鈕不可用clientConnection=tcpServer->nextPendingConnection();//用來獲取一個已連接的TcpSocket//bytesWritten為qint64類型,即長整型connect(clientConnection,SIGNAL(bytesWritten(qint64)),//?this,SLOT(updateClientProgress(qint64)));開始傳送文件%1!localFile=newQFile(fileName);//localFile代表的是文件內(nèi)容本身if(!localFile->open((QFile::ReadOnly))){應(yīng)用程序無法讀取文件.arg(fileName).arg(localFile->errorString()));//errorString是系統(tǒng)自帶的信息return;11

金陵科技學(xué)院課程設(shè)計報告}TotalBytes=localFile->size();//文件總大小//頭文件中的定義QByteArrayoutBlock;QDataStreamsendOut(&outBlock,QIODevice::WriteOnly);//設(shè)置輸出流屬性sendOut.setVersion(QDataStream::Qt_4_7);//設(shè)置Qt版本,不同版本的數(shù)據(jù)流格式不同time.start();//開始計時QStringcurrentFile=fileName.right(fileName.size()//currentFile代表所選文件的文件名-fileName.lastIndexOf('/')-1);//qint64(0)表示將0轉(zhuǎn)換成qint64類型,與(qint64)0等價//如果是,則此處為依次寫入總大小信息空間,文件名大小信息空間,文件名sendOut<<qint64(0)<<qint64(0)<<currentFile;TotalBytes+=outBlock.size();//文件名大小等信息+實際文件大小//sendOut.device()為返回io設(shè)備的當(dāng)前設(shè)置,seek(0)表示設(shè)置當(dāng)前pos為0sendOut.device()->seek(0);//返回到outBlock的開始,執(zhí)行覆蓋操作//發(fā)送總大小空間和文件名大小空間sendOut<<TotalBytes<<qint64((outBlock.size()-sizeof(qint64)*2));//qint64bytesWritten;bytesToWrite表示還剩下的沒發(fā)送完的數(shù)據(jù)//clientConnection->write(outBlock)為套接字將內(nèi)容發(fā)送出去,返回實際發(fā)送出去的字節(jié)數(shù)bytesToWrite=TotalBytes-clientConnection->write(outBlock);outBlock.resize(0);//why??}4.3.3客戶端主要程序代碼分析//創(chuàng)建新連接voidTcpClient::newConnect(){blockSize=0;tcpClient->abort();//取消已有的連接tcpClient->connectToHost(hostAddress,tcpPort);//連接到指定ip地址和端口的主機time.start();}12

金陵科技學(xué)院課程設(shè)計報告//讀取數(shù)據(jù)voidTcpClient::readMessage(){QDataStreamin(tcpClient);//這里的QDataStream可以直接用QTcpSocket對象做參數(shù)in.setVersion(QDataStream::Qt_4_7);floatuseTime=time.elapsed();if(bytesReceived<=sizeof(qint64)*2){//說明剛開始接受數(shù)據(jù)if((tcpClient->bytesAvailable()//bytesAvailable為返回將要被讀取的字節(jié)數(shù)>=sizeof(qint64)*2)&&(fileNameSize==0)){13

金陵科技學(xué)院課程設(shè)計報告五、結(jié)論本文使用面向?qū)ο蟪绦蛟O(shè)計思想,設(shè)計開發(fā)QT聊天系統(tǒng)。聊天系統(tǒng)要完成的任務(wù)就是提供用戶操作界面,方便用戶之間在局域網(wǎng)的環(huán)境下相互通信。程序的核心是通過基于TCP/IP的Socket來實現(xiàn)消息傳遞的通信部分。通過此次課程設(shè)計的鍛煉,提高了我們解決實際問題的能力,讓我們能更加從容地面對未來的工作。14

金陵科技學(xué)院課程設(shè)計報告六、參考文獻(xiàn)[1]霍亞飛.Qt及QtQuick開發(fā)實戰(zhàn)精解.北京航空航天大學(xué)出版社,2012;155-12[2]布蘭切特(JasminBlanchette)等.C++GUIProgrammingwithQt4[M].第二版.電子工業(yè)出版社,2008:223-3015

金陵科技學(xué)院課程設(shè)計報告七、附錄關(guān)鍵代碼:Tcpserver.cpp://初始化voidTcpServer::initServer(){payloadSize=64*1024;TotalBytes=0;#include<QFile>#include<QTcpServer>#include<QTcpSocket>#include<QMessageBox>#include<QFileDialog>#include<QDebug>bytesWritten=0;bytesToWrite=0;請選擇要傳送的文件ui->progressBar->reset();TcpServer::TcpServer(QWidget*parent):QDialog(parent),ui->serverOpenBtn->setEnabled(true);ui->serverSendBtn->setEnabled(false);ui(newUi::TcpServer){tcpServer->close();ui->setupUi(this);}setFixedSize(350,180);//開始發(fā)送數(shù)據(jù)voidTcpServer::sendMessage(){tcpPort=6666;tcpServer=newQTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage()));ui->serverSendBtn->setEnabled(false);clientConnection=tcpServer->nextPendingConnection();connect(clientConnection,SIGNAL(bytesWritten(qint64)),this,initServer();}SLOT(updateClientProgress(qint64)));TcpServer::~TcpServer(){開始傳送文deleteui;}件%1!localFile=newQFile(fileName);16

金陵科技學(xué)院課程設(shè)計報告if(!localFile->open((QFile::ReadOnly))){outBlock=應(yīng)用程序localFile->read(qMin(bytesToWrite,payloadSize));無法讀取文件bytesToWrite-=.arg(fileName).arg(l(int)clientConnection->write(outBlock);outBlock.resize(0);ocalFile->errorString()));return;}}else{localFile->close();TotalBytes=localFile->size();}QDataStreamsendOut(&outBlock,ui->progressBar->setMaximum(TotalBytes);ui->progressBar->setValue(bytesWritten);QIODevice::WriteOnly);sendOut.setVersion(QDataStream::Qt_4_8);time.start();//開始計時floatuseTime=time.elapsed();QStringcurrentFile=doublespeed=bytesWritten/useTime;fileName.right(fileName.size()fileName.lastIndexOf('/')-1);已發(fā)-送共%3MB已用時:%4秒估計剩sendOut<<qint64(0)<<qint64(0)<<余時間:%5秒currentFile;.arg(bytesWritten/TotalBytes+=outBlock.size();sendOut.device()->seek(0);(1024*1024)).arg(speed*1000/(1024*1024),sendOut<<TotalBytes<<qint64((outBlock.size()0,'f',2)-sizeof(qint64)*2));.arg(TotalBytes/(1024*1024)).arg(useTime/1000,0,'f',0)bytesToWrite=TotalBytes-clientConnection->write(outBlock);.arg(TotalBytes/speed/1000-outBlock.resize(0);}useTime/1000,0,'f',0));if(bytesWritten==TotalBytes){localFile->close();//更新進度條voidTcpServer::updateClientProgress(qint64tcpServer->close();numBytes){傳送文件%1成功qApp->processEvents();}bytesWritten+=(int)numBytes;if(bytesToWrite>0){}17

金陵科技學(xué)院課程設(shè)計報告//打開按鈕voidTcpServer::on_serverCloseBtn_clicked()voidTcpServer::on_serverOpenBtn_clicked(){{if(tcpServer->isListening()){fileName=QFileDialog::getOpenFileName(this);if(!fileName.isEmpty()){tcpServer->close();if(localFile->isOpen())localFile->close();clientConnection->abort();}theFileName=-fileName.right(fileName.size()fileName.lastIndexOf('/')-1);要傳送close();的文件為:}ui->serverSendBtn->setEnabled(true);ui->serverOpenBtn->setEnabled(false);//被對方拒絕}voidTcpServer::refused(){}tcpServer->close();//發(fā)送按鈕對方拒絕接voidTcpServer::on_serverSendBtn_clicked(){收!??!}if(!tcpServer->listen(QHostAddress::Any,tcpPort))//關(guān)閉事件//開始監(jiān)聽voidTcpServer::closeEvent(QCloseEvent*){{qDebug()<<tcpServer->errorString();on_serverCloseBtn_clicked();}close();return;}Tcoclient.cpp:等待對方接收emitsendFileName(theFileName);}#include<QTcpSocket>#include<QDebug>#include<QMessageBox>//關(guān)閉按鈕18

金陵科技學(xué)院課程設(shè)計報告TcpClient::TcpClient(QWidget*parent):QDialog(parent),//設(shè)置地址ui(newUi::TcpClient){voidaddress){TcpClient::setHostAddress(QHostAddressui->setupUi(this);hostAddress=address;setFixedSize(350,180);newConnect();}TotalBytes=0;bytesReceived=0;fileNameSize=0;//創(chuàng)建新連接voidTcpClient::newConnect(){tcpClient=newQTcpSocket(this);tcpPort=6666;blockSize=0;tcpClient->abort();tcpClient->connectToHost(hostAddress,tcpPort);connect(tcpClient,SIGNAL(readyRead()),this,SLOT(readMessage()));connect(tcpClient,time.start();SIGNAL(error(QAbstractSocket::SocketError)),this,}//讀取數(shù)據(jù)SLOT(displayError(QAbstractSocket::SocketError)))voidTcpClient::readMessage(){;}QDataStreamin(tcpClient);in.setVersion(QDataStream::Qt_4_7);TcpClient::~TcpClient(){floatuseTime=time.elapsed();deleteui;}if(bytesReceived<=sizeof(qint64)*2){if((tcpClient->bytesAvailable()>=sizeof(qint64)*2)&&(fileNameSize==0))//設(shè)置文件名voidTcpClient::setFileName(QStringfileName){{localFile=newQFi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論