QTcpServer Class
QTcpServer クラスは、TCP ベースのサーバーを提供します。詳細...
ヘッダ | #include <QTcpServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
を継承する: | QObject |
によって継承される: |
- 継承メンバを含む全メンバのリスト
- QTcpServerは、Network Programming APIに含まれています。
注意:このクラスのすべての関数はリエントラントです。
パブリック関数
QTcpServer(QObject *parent = nullptr) | |
virtual | ~QTcpServer() |
void | close() |
QString | errorString() const |
virtual bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
(since 6.3) int | listenBacklogSize() const |
int | maxPendingConnections() const |
virtual QTcpSocket * | nextPendingConnection() |
void | pauseAccepting() |
QNetworkProxy | proxy() const |
void | resumeAccepting() |
QHostAddress | serverAddress() const |
QAbstractSocket::SocketError | serverError() const |
quint16 | serverPort() const |
(since 6.3) void | setListenBacklogSize(int size) |
void | setMaxPendingConnections(int numConnections) |
void | setProxy(const QNetworkProxy &networkProxy) |
bool | setSocketDescriptor(qintptr socketDescriptor) |
qintptr | socketDescriptor() const |
bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
シグナル
void | acceptError(QAbstractSocket::SocketError socketError) |
void | newConnection() |
(since 6.4) void | pendingConnectionAvailable() |
保護された関数
void | addPendingConnection(QTcpSocket *socket) |
virtual void | incomingConnection(qintptr socketDescriptor) |
詳細説明
このクラスは、着信 TCP 接続を受け付けることができるようにします。ポートを指定することも、QTcpServer に自動的に選択させることもできます。特定のアドレスでリッスンすることも、すべてのマシンのアドレスでリッスンすることもできます。
listen() を呼び出して、サーバーに着信接続をリッスンさせます。newConnection() シグナルは、クライアントがサーバーに接続するたびに発行されます。クライアント接続がaddPendingConnection() 関数を使用して保留中の接続キューに追加されると、pendingConnectionAvailable() シグナルが発せられる。
QTcpSocket保留中の接続を接続済みとして受け入れるには、nextPendingConnection() を呼び出す。この関数は、クライアントとの通信に使用できるQAbstractSocket::ConnectedState 内のQTcpSocket へのポインタを返します。
エラーが発生した場合、serverError() はエラーのタイプを返し、errorString() を呼び出すと、何が起こったかを人間が読める形で説明することができる。
接続をリッスンしている場合、サーバーがリッスンしているアドレスとポートは、serverAddress() およびserverPort() として取得できます。
close() を呼び出すと、QTcpServer は着信接続の待ち受けを停止します。
QTcpServerは、ほとんどの場合、イベント・ループとともに使用するように設計されていますが、イベント・ループなしで使用することも可能です。その場合、waitForNewConnection() を使用する必要があります。これは、接続が利用可能になるか、タイムアウトが切れるまでブロックします。
QTcpSocket 、Fortune Server、Threaded Fortune Server、Torrent Exampleも参照してください 。
メンバ関数のドキュメント
[explicit]
QTcpServer::QTcpServer(QObject *parent = nullptr)
QTcpServerオブジェクトを構築します。
parent は コンストラクタに渡されます。QObject
listen() およびsetSocketDescriptor()も参照してください 。
[virtual noexcept]
QTcpServer::~QTcpServer()
QTcpServer オブジェクトを破棄する。サーバーが接続をリッスンしている場合、ソケットは自動的にクローズされる。
まだ接続しているクライアントQTcpSocketは、サーバーが削除される前に接続を切断するか、再接続する必要があります。
close()も参照 。
[signal]
void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
このシグナルは、新規接続の受け付けでエラーが発生したときに発行される。socketError パラメータには、発生したエラーのタイプが記述される。
pauseAccepting() およびresumeAccepting()も参照のこと 。
[protected]
void QTcpServer::addPendingConnection(QTcpSocket *socket)
この関数はQTcpServer::incomingConnection() から呼び出され、保留中の着信接続リストにsocket を追加する。
注意: Pending Connections メカニズムを壊したくない場合は、再実装されたincomingConnection() からこのメンバを呼び出すことを忘れないこと。この関数は、ソケットが追加された後にpendingConnectionAvailable() シグナルを発行する。
incomingConnection() およびpendingConnectionAvailable()も参照の こと。
void QTcpServer::close()
サーバを閉じる。サーバはもう着信を待ちません。
listen()も参照のこと 。
QString QTcpServer::errorString() const
最後に発生したエラーについて、人間が読める説明を返す。
serverError()も参照 。
[virtual]
bool QTcpServer::hasPendingConnections() const
サーバーに保留中の接続がある場合はtrue
を返し、そうでない場合はfalse
を返す。
nextPendingConnection() およびsetMaxPendingConnections()も参照のこと 。
[virtual protected]
void QTcpServer::incomingConnection(qintptr socketDescriptor)
この仮想関数は、新しい接続が利用可能になるとQTcpServer から呼び出される。引数socketDescriptor は、受け付けた接続のネイティブソケットディスクリプタである。
基本実装はQTcpSocket を生成し、ソケットディスクリプタを設定し、保留中の接続の内部リストにQTcpSocket を格納する。最後にnewConnection() が発行される。
この関数を再実装して、接続が可能になったときのサーバの動作を変更する。
QTcpSocket::setSocketDescriptorこのサーバがQNetworkProxy を使用している場合、socketDescriptor はネイティブソケット関数では使用できない可能性がある。
注意 : このメソッドの再実装で別のソケットを作成した場合、addPendingConnection() を呼び出して、そのソケットを Pending Connections メカニズムに追加する必要がある。
注意 : 他のスレッドで新しいQTcpSocket オブジェクトとして着信接続を処理したい場合は、socketDescriptor を他のスレッドに渡し、そこでQTcpSocket オブジェクトを生成し、そのsetSocketDescriptor() メソッドを使用する必要がある。
newConnection()、nextPendingConnection()、addPendingConnection()も参照のこと 。
bool QTcpServer::isListening() const
サーバが現在着信接続をリッスンしている場合はtrue
を返し、そうでない場合はfalse
を返す。
listen()も参照のこと 。
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
アドレスaddress 、ポートport で着信接続をリッスンするようにサーバに指示する。port が 0 の場合、ポートは自動的に選択されます。address がQHostAddress::Any の場合、サーバはすべてのネットワーク・インタフェースを listen する。
成功した場合はtrue
を返し、そうでない場合はfalse
を返す。
isListening()も参照のこと 。
[since 6.3]
int QTcpServer::listenBacklogSize() const
受付中の接続のバックログキューサイズを返します。
この関数は Qt 6.3 で導入されました。
setListenBacklogSize()も参照してください 。
int QTcpServer::maxPendingConnections() const
保留中の接続の最大数を返します。デフォルトは 30 である。
setMaxPendingConnections() およびhasPendingConnections()も参照 。
[signal]
void QTcpServer::newConnection()
このシグナルは、保留中のコネクションキューに追加されたかどうかに関わらず、 新しいコネクションが利用可能になるたびに発行される。
hasPendingConnections() およびnextPendingConnection()も参照のこと 。
[virtual]
QTcpSocket *QTcpServer::nextPendingConnection()
次の保留中の接続を接続済みのQTcpSocket オブジェクトとして返す。
ソケットはサーバの子として生成されるので、QTcpServer オブジェクトが破棄されると自動的に削除される。しかし、メモリの無駄遣いを避けるために、そのオブジェクトを使い終わったら明示的に削除することをお勧めします。
nullptr
保留中の接続がないときにこの関数を呼び出すと、 オブジェクトが返されます。
注意: 返されたQTcpSocket オブジェクトは、他のスレッドから使用することはできません。他のスレッドからの着信接続を使用したい場合は、incomingConnection() をオーバーライドする必要があります。
hasPendingConnections()も参照 。
void QTcpServer::pauseAccepting()
新しい接続の受け付けを一時停止する。キューに入れられた接続はキューに残される。
resumeAccepting()も参照のこと 。
[private signal, since 6.4]
void QTcpServer::pendingConnectionAvailable()
このシグナルは、保留中の接続キューに新しい接続が追加されるたびに発行される。
注意: これはプライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発することはできません。
この関数は Qt 6.4 で導入されました。
hasPendingConnections() およびnextPendingConnection()も参照してください 。
QNetworkProxy QTcpServer::proxy() const
このソケットのネットワークプロキシを返す。デフォルトではQNetworkProxy::DefaultProxy が使われる。
setProxy() およびQNetworkProxyも参照のこと 。
void QTcpServer::resumeAccepting()
新しい接続の受け付けを再開する。
pauseAccepting()も参照のこと 。
QHostAddress QTcpServer::serverAddress() const
サーバが接続をリッスンしている場合はサーバのアドレスを返し、そうでない場合はQHostAddress::Null を返す。
serverPort() およびlisten()も参照のこと 。
QAbstractSocket::SocketError QTcpServer::serverError() const
最後に発生したエラーのエラーコードを返す。
errorString()も参照 。
quint16 QTcpServer::serverPort() const
サーバが接続をリッスンしている場合はサーバのポートを返し、そうでない場合は 0 を返す。
serverAddress() およびlisten()も参照 。
[since 6.3]
void QTcpServer::setListenBacklogSize(int size)
受け付ける接続のバックログキューサイズをsize に設定する。 オペレーティングシステムはこの値を小さくしたり、無視したりするかもしれない。デフォルトでは、キュー・サイズは 50 である。
注意: このプロパティは、listen() を呼び出す前に設定する必要があります。
この関数は Qt 6.3 で導入されました。
listenBacklogSize()も参照してください 。
void QTcpServer::setMaxPendingConnections(int numConnections)
numConnections QTcpServer は、 () が呼び出される前に、 を超える着信接続を受け付けない。デフォルトでは、保留中の接続数の上限は30である。nextPendingConnection numConnections
サーバが保留中の接続数の上限に達した後でも、クライアントは接続できる (つまり、QTcpSocket はまだ connected() シグナルを送出できる)。QTcpServer は新しい接続の受け付けを停止するが、オペレーティングシステムはまだそれらをキューに残しておくことができる。
maxPendingConnections() およびhasPendingConnections()も参照の こと。
void QTcpServer::setProxy(const QNetworkProxy &networkProxy)
このソケットの明示的なネットワークプロキシをnetworkProxy に設定する。
このソケットのプロキシを無効にするには、QNetworkProxy::NoProxy プロキシ型を使用する:
server->setProxy(QNetworkProxy::NoProxy);
proxy() およびQNetworkProxyも参照すること 。
bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)
このサーバーが着信接続をリッスンする際に使用するソケットディスクリプタをsocketDescriptor に設定する。ソケットの設定に成功した場合はtrue
を返し、失敗した場合はfalse
を返す。
ソケットはリッスン中であると仮定される。
socketDescriptor() およびisListening()も参照のこと 。
qintptr QTcpServer::socketDescriptor() const
サーバが着信指示を待ち受けるために使用するネイティブソケットディスクリプタを返す。
サーバがQNetworkProxy を使用している場合、返されたディスクリプタはネイティブソケット関数で使用できないかもしれない。
setSocketDescriptor() およびisListening()も参照のこと 。
bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
最大でmsec ミリ秒、または着信接続が利用可能になるまで待つ。接続が利用可能な場合はtrue
を返し、そうでない場合はfalse
を返す。操作がタイムアウトし、timedOut がnullptr
でない場合、 *timedOut は真に設定される。
これはブロッキング関数呼び出しである。waitForNewConnection()は、利用可能なイベント・ループがない場合にほとんど有用である。
ノンブロッキングの代替手段は、newConnection ()シグナルに接続することである。
msec が -1 の場合、この関数はタイムアウトしない。
hasPendingConnections() およびnextPendingConnection()も参照の こと。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.