QTcpServer Class

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

Header: #include <QTcpServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Inherits: QObject
Inherited By:

QSctpServer and 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 を追加する。

注意: 接続保留の仕組みを壊したくない場合は、再実装された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 の場合、サーバはすべてのネットワーク・インタフェースをリッスンする。

成功した場合は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()も参照して ください。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。