Qt網路通訊實戰(聊天室小專案TCP實現)

2021-08-26 17:55:02 字數 3674 閱讀 2368

一、udp與tcp的區別

用乙個**來顯示這兩者的區別

比較項tcpudp

是否連線

面向連線

無連線傳輸是否可靠

可靠不可靠

流量控制

提供不提供

工作方式

全雙工可以是全雙工

應用場合

大量資料

少量資料速度慢

快我們這裡採用tcp

//當有新的連線出現時就會呼叫此函式,和newconnection功能類似

void server::incomingconnection(int socketdescriptor)

這個函式我就不多說了,注釋我寫的很清楚了

二、客戶端程式,

在qt中往往客戶端比較簡單,這裡只要乙個類即可,繼承qtcpsocket

#ifndef tcpclient_h

#define tcpclient_h

#include #include namespace ui

class tcpclient : public qwidget

;#endif // tcpclient_h

#include "tcpclient.h"

#include "ui_tcpclient.h"

#include #include #include tcpclient::tcpclient(qwidget *parent) :

qwidget(parent),

ui(new ui::tcpclient)

tcpclient::~tcpclient()

//用來處理連線成功的訊號

void tcpclient::slotconnectedsuccess()

void tcpclient::slotreceive()

void tcpclient::slotdisconnected()

void tcpclient::on_send_clicked()

qstring msg = username + ":" + ui->lineeditsend->text();

tcpsocket->write(msg.toutf8().data());

ui->lineeditsend->clear();

}void tcpclient::on_pushbuttonenter_clicked()

if(ui->lineeditusername->text() == "")

//從介面獲取使用者名稱

username = ui->lineeditusername->text();

//建立乙個通訊套接字,用來和伺服器進行通訊

tcpsocket = new qtcpsocket(this);

//和伺服器進行連線

tcpsocket->connecttohost(*serverip, port);

//和伺服器連線成功能會觸發connected訊號

connect(tcpsocket, signal(connected()), this, slot(slotconnectedsuccess()));

//接收到伺服器的資訊就會觸發readyread訊號

connect(tcpsocket, signal(readyread()), this, slot(slotreceive()));

//將進入聊天室的標誌位置為true;

status = true;

}else//已經進入了聊天室

}

#include int main(int argc, char *argv)

這裡說明一下,網上很多例子會把qt中生成的**貼出來,只要自己建立就好了,沒必要貼出來,主函式貼出來是是因為給出了解決中文字元亂碼的小套路,大家可以學習一下。

三、服務端程式

#ifndef tcpclientsocket_h

#define tcpclientsocket_h

#include //此類為乙個繼承了qtcpsocket的類,為多客戶端服務

class tcpclientsocket : public qtcpsocket

;#endif // tcpclientsocket_h

#include "tcpclientsocket.h"

#include tcpclientsocket::tcpclientsocket(qobject *parent)

void tcpclientsocket::receivedata()

void tcpclientsocket::slotclientdisconnected()

#ifndef server_h

#define server_h

#include #include #include #include "tcpclientsocket.h"

class server : public qtcpserver

;#endif // server_h

#include "server.h"

#include #include server::server(qobject *parent, int port):qtcpserver(parent)

//當有新的連線出現時就會呼叫此函式,和newconnection功能類似

void server::incomingconnection(int socketdescriptor)

void server::slotupdateserver(qstring msg, int length)

}void server::slotclientdisconnect(int descriptor)

}return;

}

#ifndef tcpserver_h

#define tcpserver_h

#include #include"server.h"

#include namespace ui

class tcpserver : public qwidget

;#endif // tcpserver_h

#include "tcpserver.h"

#include "ui_tcpserver.h"

#include #include tcpserver::tcpserver(qwidget *parent) :

qwidget(parent),

ui(new ui::tcpserver)

tcpserver::~tcpserver()

void tcpserver::slotupdateserver(qstring msg, int length)

void tcpserver::on_createbutoon_clicked()

#include int main(int argc, char *argv)

這裡主要用到很多的訊號和槽函式,一層套著一層,從最上面看到下面就好了。有些只是控制項名,在qt中統一一下即可。

串列埠通訊實戰

start.s 檔名 start.s 描述 演示串列埠通訊 define wtcon 0xe2700000 define svc stack 0xd0037d80.global start 把 start鏈結屬性改為外部,這樣其他檔案就可以看見 start了 start 第1步 關看門狗 向wtco...

Qt網路通訊學習筆記

1.tcp socket通訊 tcp即transmission control protocol,傳輸控制協議。與udp不同,它是面向連線和資料流的可靠傳輸協議。也就是說,它能使一台計算機上的資料無差錯的發往網路上的其他計算機,所以當要傳輸大量資料時,我們選用tcp協議。tcp協議的程式使用的是客戶...

網路通訊原理與實戰應用

課程簡介 課程內容涉及到計算機網路體系結構基礎知識,包括網路分層 tcp首部與ip首部結構組成,從零開始實現了乙個非同步網路通訊庫外掛程式。課程通過簡易網路程式引入對底層原理的講解,再結合實際問題,分析應對策略,最後落實到 實現。完整講解了出現問題的原因以及解決問題的方法,結構清晰,層層遞進,一目了...