http://blog.csdn.net/iloveqt5/article/details/19471587 QTcpServer用函數(shù)
bool |
listen(const QHostAddress & address =
QHostAddress::Any, quint16 port = 0) |
監(jiān)聽某個(gè)端口,,如果有新連接進(jìn)來就發(fā)出newConnection()信號(hào),連接過程中出錯(cuò)的話就發(fā)出acceptError(QAbstractSocket::SocketError socketError)信號(hào),。
在接受連接的過程中,,應(yīng)當(dāng)是有一個(gè)隊(duì)列,等待的連接都將放入連接隊(duì)列中,,名詞PendingConnections中的Pending意為即將發(fā)生的,,在等待中的。
當(dāng)隊(duì)列中有等待的連接時(shí),,可用函數(shù)
獲得這個(gè)連接,,并為這個(gè)連接分配一部"電話"(即函數(shù)返回的QTcpSocket),通信就建立了,。然后可通過這個(gè)返回的QTcpSocket與客戶端通信,。值得注意的是,這個(gè)返回的socket不可用于另一個(gè)線程,。
這是一種方式,,另一種方式可繼承這個(gè)類,重寫它的Protected Function:
virtual void incomingConnection(qintptr socketDescriptor)
這個(gè)函數(shù)在有連接時(shí)自動(dòng)執(zhí)行,。
socketDescriptor為套接字描述符,,通俗理解為,系統(tǒng)為這個(gè)連接進(jìn)來的套接字自動(dòng)分配了個(gè)ID,,用于區(qū)分不同套接字,,是個(gè)整數(shù)值。將這個(gè)ID傳給套接字就行了,。網(wǎng)上說它和文件的句柄類似,。
————————————————————————————————————————————————————————————
公有函數(shù):
- QTcpServer(QObject * parent = 0)
- virtual ~QTcpServer()
-
- void setMaxPendingConnections(int numConnections)
- void setProxy(const QNetworkProxy & networkProxy)
- bool setSocketDescriptor(qintptr socketDescriptor)
- bool listen(const QHostAddress & address = QHostAddress::Any, quint16 port = 0)
-
- virtual QTcpSocket * nextPendingConnection()
- void pauseAccepting()
- void resumeAccepting()
- void close()
- bool waitForNewConnection(int msec = 0, bool * timedOut = 0)
-
- QAbstractSocket::SocketError serverError() const
- QString errorString() const
- int maxPendingConnections() const
- QNetworkProxy proxy() const
- qintptr socketDescriptor() const
- QHostAddress serverAddress() const
- quint16 serverPort() const
- bool isListening() const
- virtual bool hasPendingConnections() const
Signals
Protected Functions
|