QTcpServer Class

QTcpServer クラスは、TCP ベースのサーバーを提供します。詳細...

ヘッダ #include <QTcpServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
を継承する: QObject
によって継承される:

QSctpServer そしてQSslServer

注意:このクラスのすべての関数はリエントラントです。

パブリック関数

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() を使用する必要があります。これは、接続が利用可能になるか、タイムアウトが切れるまでブロックします。

QTcpSocketFortune ServerThreaded Fortune ServerTorrent 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 の場合、ポートは自動的に選択されます。addressQHostAddress::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 を返す。操作がタイムアウトし、timedOutnullptr でない場合、 *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.