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 は、ネットワークプログラミング 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() シグナルが発信されます。
nextPendingConnection() を呼び出すと、保留中の接続を接続済みQTcpSocket として受け入れられます。この関数は、QAbstractSocket::ConnectedState 内のQTcpSocket へのポインタを返し、これを使用してクライアントとの通信を行うことができます。
エラーが発生した場合、serverError() はエラーの種類を返し、errorString() を呼び出すことで、何が起こったかについて人間が理解できる説明を取得できます。
接続を待機している場合、サーバーが待機しているアドレスとポートは、serverAddress() およびserverPort() として利用できます。
close() を呼び出すと、QTcpServer は着信接続の受信を停止します。
QTcpServerは主にイベントループとの併用を想定して設計されていますが、イベントループなしで使用することも可能です。その場合は、waitForNewConnection() を使用する必要があります。この関数は、接続が利用可能になるか、タイムアウトが切れるまでブロックします。
QTcpSocket 、Fortune Server、スレッド化されたFortune Server、およびTorrentの例も参照してください 。
メンバ関数のドキュメント
[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() が発行されます。
接続が利用可能になった際のサーバーの動作を変更するには、この関数を再実装してください。
このサーバーが `QNetworkProxy ` を使用している場合、`socketDescriptor ` はネイティブのソケット関数では使用できない可能性があるため、`QTcpSocket::setSocketDescriptor()` でのみ使用すべきです。
注: このメソッドの再実装で別のソケットが作成された場合 、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 の場合、サーバーはすべてのネットワークインターフェースで接続を待機します。
成功した場合は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 は、`nextPendingConnection()` が呼び出される前に、最大 `numConnections ` 個の着信接続を受け入れます。デフォルトでは、保留中の接続の上限は 30 個です。
サーバーが保留中の接続数の最大値に達した後も、クライアントは接続できる場合があります(つまり、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
サーバーが着信する指示をリッスンするために使用するネイティブソケット記述子を返します。サーバーがリッスンしていない場合は -1 を返します。
サーバーがQNetworkProxy を使用している場合、返されるディスクリプタはネイティブソケット関数では使用できない可能性があります。
setSocketDescriptor() およびisListening()も参照してください 。
bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
最大msec ミリ秒間、または着信接続が利用可能になるまで待機します。接続が利用可能な場合はtrue を返し、そうでない場合はfalse を返します。操作がタイムアウトし、timedOut がnullptr でない場合、*timedOut はtrueに設定されます。
これはブロッキング関数呼び出しです。関数が返るまでアプリケーション全体が応答しなくなるため、シングルスレッドのGUIアプリケーションでの使用は推奨されません。waitForNewConnection()は、主にイベントループが利用できない場合に有用です。
非ブロッキングの代替手段としては、newConnection() シグナルに接続する方法があります。
msec が -1 の場合、この関数はタイムアウトしません。
hasPendingConnections() およびnextPendingConnection()も参照してください 。
© 2026 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.