#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位元組 這時候我們應該根據情況設定緩衝區...