最近自己在折騰qt中實現tcp服務端的過程中,發現以往的例子都是點對點的,也就是說大都是乙個客戶端,乙個服務端,然後兩個進行通訊,而對於單個服務端與多個客戶端的通訊,非常稀少,找到乙個但對於我們新手來說,有點複雜,不好理解,下面我介紹乙個新手也能明白的一種解決方案。
下面是mainwindow.h
#ifndef mainwindow_h
#define mainwindow_h
#include #include #include namespace ui
class mainwindow : public qmainwindow
;#endif // mainwindow_h
下面是main.cpp
#include "mainwindow.h"
下面是mainwindow.cpp#include "mainwindow.h"
#include "ui_mainwindow.h"
#include int connect_num=0;
mainwindow::mainwindow(qwidget *parent) :
qmainwindow(parent),
ui(new ui::mainwindow)
//signal(clientreaddata(int,qstring,int,qbytearray))
mainwindow::~mainwindow()
void mainwindow::on_pushbutton_listen_clicked()
// if(!server->listen(qhostaddress::any, port1))
//
//修改按鍵文字
ui->pushbutton_listen->settext("取消偵聽");
qdebug()<< "listen succeessfully!";
}else
//取消偵聽
server->close();
//修改按鍵文字
ui->pushbutton_listen->settext("偵聽");
//傳送按鍵失能
ui->pushbutton_send->setenabled(false);
}}void mainwindow::on_pushbutton_send_clicked()
void mainwindow::clientreaddata(/*int clientid,qstring ip,int port,qbytearray data*/)
void mainwindow::server_new_connect()//沒接入乙個都會響應一次
// socket = server->nextpendingconnection();
//連線qtcpsocket的訊號槽,以讀取新資料
// qobject::connect(socket, &qtcpsocket::readyread, this, &mainwindow::socket_read_data);//前面是訊號 後面是槽函式
// qobject::connect(socket, &qtcpsocket::disconnected, this, &mainwindow::socket_disconnected);
//傳送按鍵使能
if(connect_num==2)
// qdebug() << "a client connect!";
}void mainwindow::socket_read_data()
}void mainwindow::socket2_read_data()
}void mainwindow::socket_disconnected()
下面是介面檔案
主要的是下面這個方法
server_new_connect() 與newconnection 這個訊號連線,而這個訊號一旦有客戶端連線上就會響應一次,而響應一次就在server_new_connect()這個方法裡面+1,
然後與相應的客戶端建立連線
connect_num=1的與對應的連線 connect_num=2的與對應的連線
兩個棧實現乙個佇列 兩個佇列實現乙個棧
這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...
兩個棧實現乙個佇列,兩個佇列實現乙個棧
1 兩個棧實現乙個佇列 入隊時,直接壓入stack1中。出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。入隊操作 void enqueue stack s1,stack s2,int m 出隊操作 void deq...
兩個棧實現乙個佇列 兩個佇列實現乙個棧
方法一 public class main 出棧操作 public int deletehead while stack1.isempty return stack2.pop 方法二 public class main public int deletehead throws exception i...