一、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 int main(int argc, char *argv)#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//已經進入了聊天室
}
這裡說明一下,網上很多例子會把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 int main(int argc, char *argv)#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()
這裡主要用到很多的訊號和槽函式,一層套著一層,從最上面看到下面就好了。有些只是控制項名,在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首部結構組成,從零開始實現了乙個非同步網路通訊庫外掛程式。課程通過簡易網路程式引入對底層原理的講解,再結合實際問題,分析應對策略,最後落實到 實現。完整講解了出現問題的原因以及解決問題的方法,結構清晰,層層遞進,一目了...