Qt中的TCP服務端和客戶端互發訊息

2021-10-10 11:16:34 字數 3318 閱讀 3867

廢話不多說,上演示效果

由於我們用到socketlamda表示式,所以工程.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 ...