QT5網路程式設計筆記 單客戶端與多客戶端

2021-08-09 02:38:14 字數 3375 閱讀 5424

//qhostinfo類作用,獲取主機名,也可以通過主機名來查詢ip位址,或者通過ip位址來反向查詢主機名。

qstring

localhostname=

qhostinfo::localhostname(); //獲取計算機名稱

qdebug()

<<

"localhostname:"

qhostinfo

info=

qhostinfo::fromname(localhostname); //獲取ip位址,包括ipv6

qdebug()

<<

"ipaddress:"

address,info.addresses()) //取出ipv4位址

foreach

(qhostaddress

address,

qnetworkinte***ce::alladdresses())//去除所有位址包括127.0.0.1

伺服器端設定:

qtcpserver qtcpsocket

qtcpserver主要負責監聽埠,如果有鏈結 獲得客戶端套接字

if(ui->port->text().isempty())

if(ui->listen->text()==tr("偵聽"))

qdebug()<<

"listen

succeessfully!";

}
當監聽到鏈結時會產生newconnect()訊號,然後建立客戶端套接字 (這個是單客戶端)

//獲取客戶端連線

m_tcpsocket

=m_tcpserver->nextpendingconnection();

//連線qtcpsocket的訊號槽,以讀取新資料

qobject::connect(m_tcpsocket,&qtcpsocket::readyread,

this,&mainwindow::socket_read_data);

qobject::connect(m_tcpsocket,&qtcpsocket::disconnected,

this,&mainwindow::socket_disconnected);

//傳送按鍵使能

ui->send->setenabled(true);

qdebug()

<<

"aclient

connect!";

將textedit的資料送到指定的客戶端上,

qdebug

()<<

"send:"

<<

ui->

sendtext

->toplaintext();

qbytearray

datasend=ui->sendtext->toplaintext().tolocal8bit();

m_tcpsocket->write(datasend);

m_tcpsocket->flush();

ui->sendtext->clear();

讀取網路資料並解析:

qbytearray

requestdata;

//讀取緩衝區資料

requestdata=

m_tcpsocket->readall();

if(requestdata.at(0)==102)

float_data;
float_data.info[0]=twobytes4[0];
float_data.info[1]=twobytes4[1];
float_data.info[2]=twobytes4[2];
float_data.info[3]=twobytes4[3];

twobytes5=requestdata.mid(17,4);

union

youunion

float_data1;
float_data1.info[0]=twobytes5[0];
float_data1.info[1]=twobytes5[1];
float_data1.info[2]=twobytes5[2];
float_data1.info[3]=twobytes5[3];
}
requestdata.clear();

//清除緩衝區

多客戶端與單客戶端的區別在於產生newconnect()訊號時的處理方式

m_tcpsocket

=m_tcpserver->nextpendingconnection();

//連線qtcpsocket的訊號槽,以讀取新資料

qobject::connect(m_tcpsocket,&qtcpsocket::readyread,

this,&mainwindow::socket_read_data);

qobject::connect(m_tcpsocket,&qtcpsocket::disconnected,

this,&mainwindow::socket_disconnected);

//傳送按鍵使能

ui->send->setenabled(true);

qdebug()

<<

"aclient

connect!";

多客戶端解析資料時的方式

qbytearray

message;

for(int

i=0;i

<

socket_list->length();i++)

44 網路客戶端程式設計

一 什麼是網際網路客戶端 這裡,我們將詳細了解三個網際網路協議 ftp,nntp 和 pop3,並寫出它們的客戶端程式 二 檔案傳輸 2.1 檔案傳輸網際網路協議 1 網際網路中最流行的事情就是檔案的交換,檔案交換無處不在 2 有很多協議可以供網際網路上傳輸檔案使用 3 最流行的有檔案傳輸協議 ft...

網路程式設計之多客戶端

1 reuseaddr 1 為了解決time wait狀態下不能馬上重啟程式的問題,所以伺服器要設定reuseadda屬性。使用setsockopt進行設定 2 setsockopt原型 int setsockopt int sockfd,int level,int optname,void opt...

python網路程式設計TCP服務多客戶端的服務端開發

服務多客戶端tcp服務端開發 2 方法說明 3 4 bind host,port 表示繫結埠號,host是ip位址,ip位址一般不進 行繫結,表示本機的任何乙個ip位址都行,port是埠號 5 listen backlog 表示設定監聽,backlog引數表示最大等待連線的 個數 6 accept ...