廢話不多說,上演示效果
由於我們用到socket跟lamda表示式,所以工程.pro檔案需要新增對應的庫
為了方便,main.cpp中讓程式顯示兩個widget視窗,程式執行起來就可以測試
serverwidget w;
w.show();
clientwidget w2;
w2.show();
服務端的ui介面布局:
2個pushbutton(send,close)
2個textedit(傳送內容,接收內容)
新建乙個監聽套接字,監聽埠號為9999的ip,等待連線,有連線過來提示成功連線同時服務端讀就緒
//監聽套接字,指定父物件,讓其自動**空間
tcpserver = new qtcpserver(this);
tcpserver->listen(qhostaddress::any, 9999);
setwindowtitle("伺服器: 9999");
//newconnection代表有新的連線
connect(tcpserver, &qtcpserver::newconnection,
[=]());}
);
客戶端的ui介面布局:
3個pushbutton(connect,send,close)
2個lineedit(埠號,ip)
2個textedit(傳送內容,接收內容)
客戶端連線按鈕主動與服務端建立連線
void clientwidget::on_buttonconnect_clicked()
連線成功後會觸發connected,提示"成功和伺服器建立好連線"同時客戶端讀就緒
//分配空間,指定父物件
tcpsocket = new qtcpsocket(this);
setwindowtitle("客戶端");
connect(tcpsocket, &qtcpsocket::connected,
[=]()
);connect(tcpsocket, &qtcpsocket::readyread,
[=]()
);
#include "serverwidget.h"
int main(int argc, char *ar**)
#include "serverwidget.h"
#include "ui_serverwidget.h"
#include serverwidget::serverwidget(qwidget *parent) :
qwidget(parent),
ui(new ui::serverwidget));}
);}serverwidget::~serverwidget()
void serverwidget::on_buttonsend_clicked()
//獲取編輯區內容
qstring str = ui->texteditwrite->toplaintext();
//給對方傳送資料, 使用套接字是tcpsocket
tcpsocket->write( str.toutf8().data() );
}void serverwidget::on_buttonclose_clicked()
//主動和客戶端埠連線
tcpsocket->disconnectfromhost();
tcpsocket->close();
tcpsocket = null;
}
#ifndef serverwidget_h
#define serverwidget_h
#include #include //監聽套接字
#include //通訊套接字
namespace ui
class serverwidget : public qwidget
;#endif // serverwidget_h
#include "clientwidget.h"
#include "ui_clientwidget.h"
#include clientwidget::clientwidget(qwidget *parent) :
qwidget(parent),
ui(new ui::clientwidget)
);connect(tcpsocket, &qtcpsocket::readyread,
[=]()
);}clientwidget::~clientwidget()
void clientwidget::on_buttonconnect_clicked()
void clientwidget::on_buttonsend_clicked()
void clientwidget::on_buttonclose_clicked()
#ifndef clientwidget_h
#define clientwidget_h
#include #include //通訊套接字
namespace ui
class clientwidget : public qwidget
;#endif // clientwidget_h
如果你覺得文章還不錯,記得"點讚關注"
TCP服務端和客戶端(1)
在陳述這個小例項之前,首先將mafile寫出來 makefile all client server all規則,他依賴於client和server規則 client tcp process.o tcp client.o client規則生成客戶端程式 gcc o client tcp proces...
TCP服務端和客戶端 8
在process.c的基礎上,繼續變換方案,將使用到readv和writev。並且使用到向量方式進行資料的傳送和接收。並在收到相應的訊號後釋放資源。include include include include include static struct iovec vs null,vc null ...
TCP服務端和客戶端 9
繼續對process.c 進行改進,用recvmsg和sendmsg來進行替換。將向量掛載到msghdr的msg iov的成員變數上進行操作。include include include include include include include static struct iovec vs ...