qt tcp接收緩衝區設定 Qt實現TCP通訊

2021-10-12 23:26:07 字數 2707 閱讀 1277

#include namespace ui {

class mainwindow;

class mainwindow : public qmainwindow

q_object

public:

explicit mainwindow(qwidget *parent = 0);

~mainwindow();

private slots:

void on_pushbutton_connect_clicked();

void on_pushbutton_send_clicked();

void socket_read_data();

void socket_disconnected();

private:

ui::mainwindow *ui;

qtcpsocket *socket;

#endif // mainwindow_h

然後是mainwindow.cpp檔案:

#include "mainwindow.h"

#include "ui_mainwindow.h"

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

ui->setupui(this);

socket = new qtcpsocket();

//連線訊號槽

qobject::connect(socket, &qtcpsocket::readyread, this, &mainwindow::socket_read_data);

qobject::connect(socket, &qtcpsocket::disconnected, this, &mainwindow::socket_disconnected);

ui->pushbutton_send->setenabled(false);

ui->lineedit_ip->settext("127.0.0.1");

ui->lineedit_port->settext("8765");

mainwindow::~mainwindow()

delete this->socket;

delete ui;

void mainwindow::on_pushbutton_connect_clicked()

if(ui->pushbutton_connect->text() == tr("連線"))

qstring ip;

int port;

//獲取ip位址

ip = ui->lineedit_ip->text();

//獲取埠號

port = ui->lineedit_port->text().toint();

//取消已有的連線

socket->abort();

//連線伺服器

socket->connecttohost(ip, port);

//等待連線成功

if(!socket->waitforconnected(30000))

qdebug() << "connection failed!";

return;

qdebug() << "connect successfully!";

//傳送按鍵使能

ui->pushbutton_send->setenabled(true);

//修改按鍵文字

ui->pushbutton_connect->settext("斷開連線");

else

//斷開連線

socket->disconnectfromhost();

//修改按鍵文字

ui->pushbutton_connect->settext("連線");

ui->pushbutton_send->setenabled(false);

void mainwindow::on_pushbutton_send_clicked()

qdebug() << "send: " << ui->textedit_send->toplaintext();

//獲取文字框內容並以ascii碼形式傳送

socket->write(ui->textedit_send->toplaintext().tolatin1());

socket->flush();

void mainwindow::socket_read_data()

qbytearray buffer;

//讀取緩衝區資料

buffer = socket->readall();

if(!buffer.isempty())

qstring str = ui->textedit_recv->toplaintext();

str+=tr(buffer);

//重新整理顯示

ui->textedit_recv->settext(str);

void mainwindow::socket_disconnected()

//傳送按鍵失能

ui->pushbutton_send->setenabled(false);

//修改按鍵文字

ui->pushbutton_connect->settext("連線");

qdebug() << "disconnected!";

socket 接收和傳送緩衝區

問題產生 在進行客戶端向服務端傳送資料時,每次傳送一定數量資料後傳送端就等不到send函式的返回,導致程式一直卡死在send函式。通過抓包發現 傳送端傳送過快而接收端處理速度過慢,導致快速傳送一定量資料後wireshark顯示傳送端傳送資料有window full提醒,幾次之後接收端會傳送zero ...

緩衝區設定 套接字緩衝區大小及限制

pv4資料報的最大值是65535位元組,包括ipv4首部。ipv6資料報的最大值是65575位元組,包括40位元組的首部。mtu ip資料報的最大傳輸單元,乙太網的mtu是1500位元組。ipv4要求的最小鏈路mtu是68位元組。ipv6要求的最小鏈路mtu是1280位元組。如果乙個ipv6的資料報...

設定socket緩衝區大小

分類 天上的星 亮晶晶 2008 11 18 16 50 2973人閱讀收藏 舉報socket傳送資料時候先把資料傳送到socket緩衝區中,之後接受函式再從緩衝區中取資料,如果傳送端特別快的時候,緩衝區很快就被填滿 socket預設的是1024 8 8192位元組 這時候我們應該根據情況設定緩衝區...