關於使用QTcpSocket的一些總結

2022-06-28 23:12:22 字數 2042 閱讀 5257

qtcpsocket類的方法connecttohost會洩露記憶體,即使把呼叫這個方法的qtcpsocket例項delete掉,記憶體也不會釋放!反覆connecttohost會導致段錯誤,十分危險。必須控制connecttohost的使用次數!

連線伺服器 

m_tcpsocket->connecttohost(「127.0.0.1」, 9877); 

connected = m_tcpsocket->waitforconnected(); 

只有使用waitforconnected()後,qtcpsocket才真正嘗試連線伺服器,並返回是否連線的結果。

寫資料 

m_tcpsocket->write(str.tostdstring().c_str(), strlen(str.tostdstring().c_str())); 

m_tcpsocket->waitforbyteswritten(); 

當使用waitforbyteswritten()後,qtcpsocket才真正傳送資料。 

m_tcpsocket->write(str1.tostdstring().c_str(), strlen(str1.tostdstring().c_str())); 

m_tcpsocket->write(str2.tostdstring().c_str(), strlen(str2.tostdstring().c_str())); 

的結果是傳送了str1str2

斷開與伺服器的連線 

m_tcpsocket->disconnectfromhost() 

m_tcpsocket->waitfordisconnected()

善於使用qtcpsocket的signal:connected(),disconnected(),error(qabstractsocket::socketerror) 

配合自定義私有開關變數bool connected,qtimer可以實現自動重連線等邏輯。(注意:如果乙個執行緒有多個連線的話,由於qtimer是中斷當前執行緒的事件訊息,故會影響其他連線,且重連線費時,故不太適用)

qtcpsocket除錯經驗分享

這久在寫乙個基於tcp的通訊程式,server端用wince實現,而client端用qt實現,之前已寫了乙個vc的client端,能正確向server傳送資料。

將client端改用qt實現後connecttohost()後,server端已能正確accept(),但就是write()後server的read函式無法響應。除錯了半天沒有成功,火大呀!今天試著輸出socket的狀態後得到如下: 

bool tcpclient::newconnect(const qstring &iaddr, quint16 iport) 

通過輸出狀態,已經找到問題的所在,哎!都是業務不熟害的呀! 

socket的連線是非同步的,所以必須等連線建立完成才能使用,所以分別加入waitforconnected()和waitforbyteswritten()後除錯通過。 

bool tcpclient::newconnect(const qstring &iaddr, quint16 iport) 

qdebug("state:%d\n",msocket>state()); // state: 3(connectedstate)正確

connect(msocket,signal(readyread()),this,slot(read()));

connect(msocket,signal(disconnected()),this,slot(disconnect()));return(true);qint64 tcpclient::write(const qbytearray &idata) 

{ qint64len = msocket->write(idata); 

msocket->waitforbyteswritten(300); 

qdebug(「state:%d\n」,msocket->state()); // state: 3(connectedstate)正確

msleep(200);

return(len);

**:

QTcpSocket連續傳送資料的問題

在qt的學習網路的學習中,最大的問題是伺服器與客戶端收發資料的問題,當一方連續傳送幾次資料給另一方時,容易出現好幾種錯誤 1 收到的資料不全,只有第乙個 2 收不到 3 收到的資料不對 readyread在訊號到達時,開始接收,我即使呼叫幾次write,也不能解決這個問題。我嘗試了幾個方法 傳送的是...

QTcpSocket 傳送和接收資料的幾種方法

1 qtcpsocket 繼承於qabstractsocket繼承於qiodevice 2 qtcpsocket 提供的幾種接收和傳送資料方法 3 例子1 write const qbytearray qint64 cpp 用於暫存要傳送的資料 qbytearray block 使用資料流寫入資料 ...

關於this 的使用

如有不對的地方請大家指出,呵呵.this 的使用 1.this是指當前物件自己。當在乙個類中要明確指出使用物件自己的的變數或函式時就應該加上this引用。如下面這個例子中 public class a public static void main string args 執行結果 s hellow...