このページでは

QAbstractSocket Class

QAbstractSocket クラスは、すべてのソケットタイプに共通する基本機能を提供します。詳細...

ヘッダー: #include <QAbstractSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
継承元: QIODevice
継承元:

QTcpSocket およびQUdpSocket

注:このクラスのすべての関数は再入可能です。

パブリック型

enum BindFlag { ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform }
flags BindMode
enum NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, AnyIPProtocol, UnknownNetworkLayerProtocol }
enum PauseMode { PauseNever, PauseOnSslErrors }
flags PauseModes
enum SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError }
enum SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, KeepAliveCountOption }
enum SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState }
enum SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType }

パブリック関数

QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
virtual ~QAbstractSocket()
void abort()
virtual bool bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
bool bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
(since 6.2) bool bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
virtual void connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
void connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
virtual void disconnectFromHost()
QAbstractSocket::SocketError error() const
bool flush()
bool isValid() const
QHostAddress localAddress() const
quint16 localPort() const
QAbstractSocket::PauseModes pauseMode() const
QHostAddress peerAddress() const
QString peerName() const
quint16 peerPort() const
QString protocolTag() const
QNetworkProxy proxy() const
qint64 readBufferSize() const
virtual void resume()
void setPauseMode(QAbstractSocket::PauseModes pauseMode)
void setProtocolTag(const QString &tag)
void setProxy(const QNetworkProxy &networkProxy)
virtual void setReadBufferSize(qint64 size)
virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
virtual qintptr socketDescriptor() const
virtual QVariant socketOption(QAbstractSocket::SocketOption option)
QAbstractSocket::SocketType socketType() const
QAbstractSocket::SocketState state() const
virtual bool waitForConnected(int msecs = 30000)
virtual bool waitForDisconnected(int msecs = 30000)

再実装されたパブリック関数

virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual void close() override
virtual bool isSequential() const override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

シグナル

void connected()
void disconnected()
void errorOccurred(QAbstractSocket::SocketError socketError)
void hostFound()
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void stateChanged(QAbstractSocket::SocketState socketState)

Protected 関数再実装された Public 関数

void setLocalAddress(const QHostAddress &address)
void setLocalPort(quint16 port)
void setPeerAddress(const QHostAddress &address)
void setPeerName(const QString &name)
void setPeerPort(quint16 port)
void setSocketError(QAbstractSocket::SocketError socketError)
void setSocketState(QAbstractSocket::SocketState state)

再実装されたプロテクトされた関数

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxlen) override
virtual qint64 skipData(qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 size) override

詳細な説明

QAbstractSocket は、QTcpSocket およびQUdpSocket の基底クラスであり、これら 2 つのクラスに共通するすべての機能を含んでいます。ソケットが必要な場合は、次の 2 つの選択肢があります。

  • QTcpSocket またはQUdpSocket をインスタンス化します。
  • ネイティブソケット記述子を作成し、QAbstractSocket をインスタンス化してから、setSocketDescriptor() を呼び出してネイティブソケットをラップする。

TCP(Transmission Control Protocol)は、信頼性が高く、ストリーム指向かつ接続指向のトランスポートプロトコルです。 UDP(User Datagram Protocol)は、非信頼性で、データグラム指向、接続不要のプロトコルです。実際には、TCPはデータの連続的な送信に適しているのに対し、信頼性が重要でない場合は、より軽量なUDPを使用できます。

QAbstractSocket の API は、これら 2 つのプロトコルの違いのほとんどを統一しています。 たとえば、UDP は接続レスですが、connectToHost() は UDP ソケットに対して仮想接続を確立するため、基盤となるプロトコルに関係なく、QAbstractSocket をほぼ同じ方法で使用することができます。内部的には、QAbstractSocket はconnectToHost() に渡されたアドレスとポートを記憶しており、read() やwrite() などの関数はこれらの値を使用します。

QAbstractSocketは常に状態を持っており(state()によって返される)、初期状態はUnconnectedState である。connectToHost()を呼び出した後、ソケットはまずHostLookupState の状態に入る。ホストが見つかった場合、QAbstractSocketはConnectingState の状態に入り、hostFound()シグナルを発する。 接続が確立されると、ConnectedState 状態に入り、connected()シグナルを発行します。いずれの段階でもエラーが発生した場合は、errorOccurred()シグナルが発行されます。状態が変更されるたびに、stateChanged()シグナルが発行されます。便宜上、isValid()は、ソケットが読み書き可能な状態であればtrue を返しますが、読み書きを行うには、ソケットの状態がConnectedState でなければならないことに注意してください。

データの読み書きは、read() またはwrite() を呼び出すか、便利関数であるreadLine() およびreadAll() を使用します。また、QAbstractSocket はQIODevice からgetChar()、putChar()、およびungetChar() を継承しており、これらは 1 バイト単位で動作します。bytesWritten() シグナルは、ソケットにデータが書き込まれたときに発火します。 なお、Qtでは書き込みバッファのサイズに制限はありません。このシグナルを監視することで、そのサイズを確認できます。

readyRead() シグナルは、新しいデータチャンクが到着するたびに発火します。その後、bytesAvailable() は、読み取り可能なバイト数を返します。通常は、readyRead() シグナルをスロットに接続し、そこで利用可能なすべてのデータを読み取ります。 データを一度にすべて読み込まなくても、残りのデータは後で引き続き利用可能であり、新たに受信したデータは QAbstractSocket の内部読み取りバッファに追加されます。読み取りバッファのサイズを制限するには、setReadBufferSize() を呼び出します。

ソケットを閉じるには、disconnectFromHost()を呼び出します。QAbstractSocketはQAbstractSocket::ClosingState 状態に入ります。保留中のデータがすべてソケットに書き込まれた後、QAbstractSocketは実際にソケットを閉じ、QAbstractSocket::UnconnectedState 状態に入り、disconnected()を発行します。 接続を直ちに中止し、保留中のデータをすべて破棄したい場合は、代わりにabort()を呼び出してください。リモートホストが接続を閉じた場合、QAbstractSocketはerrorOccurred (QAbstractSocket::RemoteHostClosedError )を発行します。この間、ソケットの状態は引き続きConnectedState のままとなり、その後disconnected()シグナルが発行されます。

接続先のピアのポートとアドレスは、peerPort() およびpeerAddress() を呼び出すことで取得できます。peerName() は、connectToHost() に渡されたピアのホスト名を返します。localPort() およびlocalAddress() は、ローカルソケットのポートとアドレスを返します。

QAbstractSocket は、特定のシグナルが発信されるまで呼び出しスレッドを一時停止させる一連の関数を提供します。これらの関数を使用して、ブロッキングソケットを実装することができます。

  • waitForConnected() は、接続が確立されるまでブロックします。
  • waitForReadyRead() は、読み取り可能な新しいデータが利用可能になるまでブロックします。
  • waitForBytesWritten() は、1 つのデータペイロードがソケットに書き込まれるまでブロックします。
  • waitForDisconnected() は、接続が閉じられるまでブロックします。

例を示します:

    int numRead = 0, numReadTotal = 0;
    char buffer[50];

    forever {
        numRead  = socket.read(buffer, 50);

        // do whatever with array

        numReadTotal += numRead;
        if (numRead == 0 && !socket.waitForReadyRead())
            break;
    }

waitForReadyRead() がfalse を返した場合、接続が閉じられたか、エラーが発生したことを意味します。

ブロッキングソケットを使用したプログラミングは、ノンブロッキングソケットを使用したプログラミングとは根本的に異なります。ブロッキングソケットはイベントループを必要とせず、通常はコードがシンプルになります。ただし、GUIアプリケーションでは、ユーザーインターフェースのフリーズを防ぐため、ブロッキングソケットは非GUIスレッドでのみ使用すべきです。 両方のアプローチの概要については、fortuneclientおよびblockingfortuneclientの例を参照してください。

注: シグナルとブロッキング関数を併用することは推奨されません 。どちらか一方を使用してください。

QAbstractSocket は、QTextStream およびQDataStream のストリーム演算子(operator<<() および operator>>())と併用できます。ただし、注意すべき点が 1 つあります。operator>>() を使用して読み取りを行う前に、十分なデータが利用可能であることを確認する必要があります。

QNetworkAccessManager およびQTcpServerも参照してください 。

メンバ型のドキュメント

enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode

この列挙型は、QAbstractSocket::bind() の動作を変更するために渡すことができるさまざまなフラグを表しています。

定数定数名説明
QAbstractSocket::ShareAddress0x1他のサービスが同じアドレスとポートにバインドすることを許可します。これは、複数のプロセスが同じアドレスとポートをリッスンして 1 つのサービスの負荷を分担する場合に便利です (たとえば、複数のプリフォークされたリスナーを持つ Web サーバーでは、応答時間を大幅に改善できます)。 ただし、どのサービスも再バインドが許可されるため、このオプションには特定のセキュリティ上の考慮事項があります。このオプションを ReuseAddressHint と組み合わせると、サービスが既存の共有アドレスを再バインドすることも許可されることに注意してください。Unix では、これは SO_REUSEADDR ソケットオプションと同等です。 Windows では、これがデフォルトの動作であるため、このオプションは無視されます。
QAbstractSocket::DontShareAddress0x2アドレスとポートを排他的にバインドし、他のサービスが再バインドできないようにします。このオプションを `QAbstractSocket::bind()` に渡すことで、成功した場合、そのアドレスとポートをリッスンするのは当該サービスのみであることが保証されます。たとえ `ReuseAddressHint` を指定したとしても、どのサービスも再バインドすることはできません。 このオプションは ShareAddress よりも高いセキュリティを提供しますが、特定のオペレーティングシステムでは、管理者権限でサーバーを実行する必要があります。Unix および macOS では、アドレスとポートをバインドする際のデフォルトの動作は共有しないことであるため、このオプションは無視されます。Windows では、このオプションは SO_EXCLUSIVEADDRUSE ソケットオプションを使用します。
QAbstractSocket::ReuseAddressHint0x4QAbstractSocket に対して、アドレスとポートがすでに別のソケットによってバインドされている場合でも、サービスの再バインドを試みるよう指示します。Windows および Unix では、これは SO_REUSEADDR ソケットオプションと同等です。
QAbstractSocket::DefaultForPlatform0x0現在のプラットフォームのデフォルトオプションです。UnixおよびmacOSでは、これは (DontShareAddress + ReuseAddressHint) と同等であり、Windowsでは ShareAddress と同等です。

BindMode 型はQFlags<BindFlag> の typedef です。BindFlag 値の論理和(OR)を格納します。

enum QAbstractSocket::NetworkLayerProtocol

この列挙型は、Qt Networkで使用されるネットワーク層プロトコルの値を定義しています。

定数値説明
QAbstractSocket::IPv4Protocol0IPv4
QAbstractSocket::IPv6Protocol1IPv6
QAbstractSocket::AnyIPProtocol2IPv4 または IPv6
QAbstractSocket::UnknownNetworkLayerProtocol-1IPv4およびIPv6以外

QHostAddress::protocol()も参照してください 。

enum QAbstractSocket::PauseMode
flags QAbstractSocket::PauseModes

この列挙型は、ソケットがデータ転送の継続を控えるべき場合の挙動を定義します。現在サポートされている通知は、QSslSocket::sslErrors() のみです。

定数値説明
QAbstractSocket::PauseNever0x0ソケット上のデータ転送を一時停止しない。これがデフォルトであり、Qt 4 の動作と一致する。
QAbstractSocket::PauseOnSslErrors0x1SSL エラー通知(QSslSocket::sslErrors())を受信した際、ソケット上のデータ転送を一時停止します。

PauseModes 型は、QFlags<PauseMode> の typedef です。PauseMode 値の論理和(OR)を格納します。

enum QAbstractSocket::SocketError

この列挙型は、発生しうるソケットエラーを表します。

定数値説明
QAbstractSocket::ConnectionRefusedError0接続が相手側によって拒否された(またはタイムアウトした)。
QAbstractSocket::RemoteHostClosedError1リモートホストが接続を閉じました。リモートからの接続終了通知が送信された後、クライアントソケット(つまり、このソケット)も閉じられることに注意してください。
QAbstractSocket::HostNotFoundError2ホストアドレスが見つかりませんでした。
QAbstractSocket::SocketAccessError3アプリケーションに必要な権限が不足していたため、ソケット操作が失敗しました。
QAbstractSocket::SocketResourceError4ローカルシステムのリソースが不足しました(例:ソケットが多すぎる)。
QAbstractSocket::SocketTimeoutError5ソケット操作がタイムアウトしました。
QAbstractSocket::DatagramTooLargeError6データグラムのサイズがオペレーティングシステムの制限(8192 バイト程度の場合もあります)を超えていました。
QAbstractSocket::NetworkError7ネットワークでエラーが発生しました(例:ネットワークケーブルが誤って抜かれた)。
QAbstractSocket::AddressInUseError8QAbstractSocket::bind() に指定されたアドレスはすでに使用されており、排他的に設定されていました。
QAbstractSocket::SocketAddressNotAvailableError9QAbstractSocket::bind() に指定されたアドレスが、そのホストに属していない。
QAbstractSocket::UnsupportedSocketOperationError10要求されたソケット操作が、ローカルオペレーティングシステムでサポートされていない(例:IPv6 がサポートされていない)。
QAbstractSocket::ProxyAuthenticationRequiredError12ソケットがプロキシを使用しており、そのプロキシで認証が必要とされています。
QAbstractSocket::SslHandshakeFailedError13SSL/TLS ハンドシェイクが失敗したため、接続が閉じられました(QSslSocket でのみ使用されます)。
QAbstractSocket::UnfinishedSocketOperationError11QAbstractSocketEngine でのみ使用されます。最後に実行された操作がまだ完了していません(バックグラウンドでまだ進行中です)。
QAbstractSocket::ProxyConnectionRefusedError14そのサーバーへの接続が拒否されたため、プロキシサーバーに接続できませんでした
QAbstractSocket::ProxyConnectionClosedError15プロキシサーバーへの接続が予期せず切断されました(最終的なピアへの接続が確立される前に)。
QAbstractSocket::ProxyConnectionTimeoutError16プロキシサーバーへの接続がタイムアウトしたか、認証フェーズでプロキシサーバーが応答を停止しました。
QAbstractSocket::ProxyNotFoundError17setProxy() で設定されたプロキシアドレス(またはアプリケーションプロキシ)が見つかりませんでした。
QAbstractSocket::ProxyProtocolError18プロキシサーバーからの応答が理解できなかったため、プロキシサーバーとの接続ネゴシエーションに失敗しました。
QAbstractSocket::OperationError19ソケットが操作を許可しない状態にある間に、操作が試行されました。
QAbstractSocket::SslInternalError20使用中の SSL ライブラリが内部エラーを報告しました。これは、おそらくライブラリのインストール不良または設定ミスが原因です。
QAbstractSocket::SslInvalidUserDataError21無効なデータ(証明書、鍵、暗号など)が提供され、その使用により SSL ライブラリでエラーが発生しました。
QAbstractSocket::TemporaryError22一時的なエラーが発生しました(例:操作がブロックされ、ソケットがノンブロッキングである場合など)。
QAbstractSocket::UnknownSocketError-1未確認のエラーが発生しました。

QAbstractSocket::error() およびQAbstractSocket::errorOccurred()も参照してください 。

enum QAbstractSocket::SocketOption

この列挙型は、ソケットに設定可能なオプションを表します。必要に応じて、ソケットからconnected()シグナルを受信した後、あるいはQTcpServer から新しいソケットを受け取った後に、これらのオプションを設定することができます。

定数値説明
QAbstractSocket::LowDelayOption0低遅延のためにソケットを最適化しようとします。QTcpSocket の場合、これにより TCP_NODELAY オプションが設定され、ナグルのアルゴリズムが無効になります。有効にするには、これを 1 に設定してください。
QAbstractSocket::KeepAliveOption1SO_KEEPALIVE ソケットオプションを有効にするには、これを 1 に設定します。
QAbstractSocket::MulticastTtlOption2これを整数値に設定すると、IP_MULTICAST_TTL(マルチキャストデータグラムのTTL)ソケットオプションが設定されます。
QAbstractSocket::MulticastLoopbackOption3これを 1 に設定すると、IP_MULTICAST_LOOP(マルチキャスト・ループバック)ソケット・オプションが有効になります。
QAbstractSocket::TypeOfServiceOption4このオプションは Windows ではサポートされていません。これは IP_TOS ソケットオプションに対応します。設定可能な値については、以下の表を参照してください。
QAbstractSocket::SendBufferSizeSocketOption5OS レベルでソケットの送信バッファサイズをバイト単位で設定します。これは、SO_SNDBUF ソケットオプションに対応しています。このオプションは、QIODevice またはQAbstractSocket バッファには影響しません。この列挙型値は Qt 5.3 で導入されました。
QAbstractSocket::ReceiveBufferSizeSocketOption6OS レベルでソケットの受信バッファサイズをバイト単位で設定します。これは SO_RCVBUF ソケットオプションに対応します。このオプションは、QIODevice またはQAbstractSocket バッファには影響しません(setReadBufferSize() を参照してください)。この列挙型値は Qt 5.3 で導入されました。
QAbstractSocket::PathMtuSocketOption7IPスタックが現在認識しているパス最大伝送単位(PMTU)の値(存在する場合)を取得します。一部のIPスタックでは、送信用のMTUを設定することも可能です。この列挙値はQt 5.11で導入されました。
QAbstractSocket::KeepAliveIdleOption8KeepAliveOptionが有効な場合、TCPがキープアライブプローブの送信を開始するまでに接続がアイドル状態である必要がある時間(秒単位)。この列挙値はQt 6.11で導入されました。
QAbstractSocket::KeepAliveIntervalOption9KeepAliveOptionが有効な場合、個々のキープアライブプローブ間の間隔(秒単位)。このオプションはすべてのOSでサポートされているわけではありません。この列挙型値はQt 6.11で導入されました。
QAbstractSocket::KeepAliveCountOption10KeepAliveOptionが有効な場合、TCPが接続を切断する前に送信されるキープアライブプローブの最大数です。このオプションは、すべてのOSでサポートされているわけではありません。この列挙値はQt 6.11で導入されました。

TypeOfServiceOptionの可能な値は以下の通りです:

値説明
224ネットワーク制御
192ネットワーク間制御
160CRITIC/ECP
128フラッシュ・オーバーライド
96フラッシュ
64即時
32優先度
0ルーチン

関連項目: QAbstractSocket::setSocketOption() およびQAbstractSocket::socketOption()。

enum QAbstractSocket::SocketState

この列挙型は、ソケットが取り得るさまざまな状態を表します。

定数値説明
QAbstractSocket::UnconnectedState0ソケットは接続されていません。
QAbstractSocket::HostLookupState1ソケットがホスト名の検索を実行しています。
QAbstractSocket::ConnectingState2ソケットが接続の確立を開始しました。
QAbstractSocket::ConnectedState3接続が確立されています。
QAbstractSocket::BoundState4ソケットがアドレスとポートにバインドされました。
QAbstractSocket::ClosingState6ソケットが閉じられようとしています(書き込み待ちのデータが残っている可能性があります)。
QAbstractSocket::ListeningState5内部使用のみ。

QAbstractSocket::state()も参照してください 。

enum QAbstractSocket::SocketType

この列挙型は、トランスポート層プロトコルを記述するものです。

定数値説明
QAbstractSocket::TcpSocket0TCP
QAbstractSocket::UdpSocket1UDP
QAbstractSocket::SctpSocket2SCTP
QAbstractSocket::UnknownSocketType-1TCP、UDP、SCTP 以外

関連項目: QAbstractSocket::socketType()。

メンバ関数のドキュメント

QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)

socketType 型の新しい抽象ソケットを作成します。parent 引数は、QObject のコンストラクタに渡されます。

socketType()、QTcpSocket 、およびQUdpSocketも参照してください 。

[virtual noexcept] QAbstractSocket::~QAbstractSocket()

ソケットを破棄します。

void QAbstractSocket::abort()

現在の接続を中止し、ソケットをリセットします。disconnectFromHost() とは異なり、この関数はソケットを直ちに閉じ、書き込みバッファに残っている未送信のデータを破棄します。

disconnectFromHost() およびclose()も参照してください 。

[virtual] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

ポートport で、BindMode mode を使用して、address にバインドします。

UDPソケットの場合、バインド後、指定されたアドレスとポートにUDPデータグラムが到着するたびに、QUdpSocket::readyRead()シグナルが発信されます。したがって、この関数はUDPサーバーの作成に役立ちます。

TCP ソケットの場合、この関数を使用して、送信接続に使用するインターフェースを指定できます。これは、複数のネットワークインターフェースがある場合に役立ちます。

デフォルトでは、ソケットはDefaultForPlatform BindMode を使用してバインドされます。ポートが指定されていない場合は、ランダムなポートが選択されます。

成功した場合、この関数はtrue を返し、ソケットはBoundState 状態になります。失敗した場合はfalse を返します。

bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

ポートport に対して、QHostAddress:Any にバインドし、BindMode mode を使用します。

デフォルトでは、DefaultForPlatform BindMode を使用してソケットがバインドされます。ポートが指定されていない場合は、ランダムなポートが選択されます。

これはオーバーロードされた関数です。

[since 6.2] bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

BindMode (mode )を使用して、ポートport の特殊アドレスaddr にバインドします。

デフォルトでは、ソケットはDefaultForPlatform BindMode を使用してバインドされます。ポートが指定されていない場合は、ランダムなポートが選択されます。

これはオーバーロードされた関数です。

この関数は Qt 6.2 で導入されました。

[override virtual] qint64 QAbstractSocket::bytesAvailable() const

QIODevice::bytesAvailable() const を再実装します。

読み取り待ちの状態にある受信バイト数を返します。

bytesToWrite() およびread()も参照してください 。

[override virtual] qint64 QAbstractSocket::bytesToWrite() const

QIODevice::bytesToWrite() const を再実装します。

書き込み待ちのバイト数を返します。これらのバイトは、制御がイベントループに戻ったとき、またはflush()が呼び出されたときに書き込まれます。

bytesAvailable() およびflush()も参照してください 。

[override virtual] void QAbstractSocket::close()

QIODevice::close() を再実装します。

ソケットのI/Oデバイスを閉じ、disconnectFromHost()を呼び出してソケットの接続を閉じます。

I/O デバイスが閉じられたときに発生する動作の詳細については、QIODevice::close() を参照してください。

abort()も参照してください 。

[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

指定されたport で、hostName への接続を試みます。protocol パラメータを使用すると、使用するネットワークプロトコル(例:IPv4またはIPv6)を指定できます。

ソケットは指定されたopenMode で開かれ、まずHostLookupState に入り、次にhostName のホスト名検索を実行します。検索が成功した場合、hostFound()が発行され、QAbstractSocket はConnectingState に入ります。その後、検索によって返されたアドレスまたはアドレス群への接続を試みます。最後に、接続が確立されると、QAbstractSocket はConnectedState に入り、connected()を発行します。

どの時点でも、ソケットはerrorOccurred() を発行して、エラーが発生したことを通知することができます。

hostName は、文字列形式の IP アドレス(例: "43.195.83.32")でも、ホスト名(例: "example.com")でもかまいません。QAbstractSocket は、必要な場合にのみ検索を行います。port はネイティブのバイト順で指定されます。

state()、peerName()、peerAddress()、peerPort()、およびwaitForConnected()も参照してください 。

void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)

ポートport でのaddress への接続を試行しています。

これはオーバーロードされた関数です。

[signal] void QAbstractSocket::connected()

このシグナルは、connectToHost() が呼び出され、接続が正常に確立された後に発せられます。

注: 一部のオペレーティングシステムでは、 localhost への接続の場合、connectToHost() の呼び出しから直接 connected() シグナルが発信されることがあります。

関連項目: connectToHost() およびdisconnected()。

[virtual] void QAbstractSocket::disconnectFromHost()

ソケットを閉じる試みを行います。書き込み待ちのデータがある場合、QAbstractSocket はClosingState 状態に入り、すべてのデータが書き込まれるまで待機します。最終的にはUnconnectedState 状態に入り、disconnected()シグナルを発行します。

connectToHost()も参照してください 。

[signal] void QAbstractSocket::disconnected()

このシグナルは、ソケットの接続が切断されたときに発生します。

警告: このシグナルに接続されたスロット内で、sender() を削除する必要がある場合は 、deleteLater() 関数を使用してください。

関連項目: connectToHost()、disconnectFromHost()、およびabort()。

QAbstractSocket::SocketError QAbstractSocket::error() const

最後に発生したエラーのタイプを返します。

state() およびerrorString()も参照してください 。

[signal] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)

このシグナルは、エラーが発生した後に発せられます。socketError パラメータは、発生したエラーの種類を表します。

このシグナルが発生した際、ソケットは再接続の試行に対応できる状態ではない可能性があります。その場合は、イベントループから再接続を試みる必要があります。例えば、タイムアウトに 0ns を指定して QChronoTimer::singleShot() を使用します。

QAbstractSocket::SocketError は登録済みのメタタイプではないため、キュー化された接続については、Q_DECLARE_METATYPE() およびqRegisterMetaType() を使用して登録する必要があります。

error()、errorString()、および「カスタム Qt タイプの作成」も参照してください 。

bool QAbstractSocket::flush()

この関数は、ブロックすることなく、内部の書き込みバッファから基になるネットワークソケットへ、可能な限り多くのデータを書き込みます。データが書き込まれた場合、この関数は `true` を返します。そうでない場合は `false` を返します。

QAbstractSocket がバッファされたデータの送信を直ちに開始する必要がある場合は、この関数を呼び出してください。正常に書き込まれたバイト数はオペレーティングシステムによって異なります。ほとんどの場合、制御がイベントループに戻るとQAbstractSocket が自動的にデータの送信を開始するため、この関数を呼び出す必要はありません。イベントループがない場合は、代わりにwaitForBytesWritten()を呼び出してください。

write() およびwaitForBytesWritten()も参照してください 。

[signal] void QAbstractSocket::hostFound()

このシグナルは、connectToHost() が呼び出され、ホストの検索が成功した後に発火します。

注: Qt 4.6.3以降、 DNS 結果がキャッシュされている可能性があるため、QAbstractSocket は `connectToHost()` の呼び出しから直接 `hostFound()` を発行する場合があります。

connected()も参照してください 。

[override virtual] bool QAbstractSocket::isSequential() const

QIODevice::isSequential() const を再実装します。

bool QAbstractSocket::isValid() const

ソケットが有効で、使用可能な状態であればtrue を返し、そうでない場合はfalse を返します。

注: 読み取りや書き込みを行うには、ソケットの状態が ConnectedState である必要があります。

state()も参照してください 。

QHostAddress QAbstractSocket::localAddress() const

利用可能な場合はローカルソケットのホストアドレスを返し、そうでない場合はQHostAddress::Null を返します。

これは通常、ホストのメインの IP アドレスですが、ローカルホストへの接続の場合は `QHostAddress::LocalHost ` (127.0.0.1) になることもあります。

localPort()、peerAddress()、およびsetLocalAddress()も参照してください 。

quint16 QAbstractSocket::localPort() const

利用可能な場合は、ローカルソケットのホストポート番号(ネイティブのバイト順)を返します。利用できない場合は 0 を返します。

localAddress()、peerPort()、およびsetLocalPort()も参照してください 。

QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const

このソケットの一時停止モードを返します。

setPauseMode() およびresume()も参照してください 。

QHostAddress QAbstractSocket::peerAddress() const

ソケットがConnectedState の状態にある場合、接続先のピアのアドレスを返します。それ以外の場合は、QHostAddress::Null を返します。

peerName()、peerPort()、localAddress()、およびsetPeerAddress()も参照してください 。

QString QAbstractSocket::peerName() const

connectToHost() で指定されたピア名を返します。connectToHost() が呼び出されていない場合は、空のQString を返します。

peerAddress()、peerPort()、およびsetPeerName()も参照してください 。

quint16 QAbstractSocket::peerPort() const

ソケットがConnectedState の状態にある場合、接続先のピアのポート番号を返します。それ以外の場合は0を返します。

peerAddress()、localPort()、およびsetPeerPort()も参照してください 。

QString QAbstractSocket::protocolTag() const

このソケットのプロトコルタグを返します。プロトコルタグが設定されている場合、内部でこのソケットが作成される際に、QNetworkProxyQuery にこの値が渡され、使用するプロトコルタグとして指定されます。

setProtocolTag() およびQNetworkProxyQueryも参照してください 。

QNetworkProxy QAbstractSocket::proxy() const

このソケットのネットワークプロキシを返します。デフォルトでは `QNetworkProxy::DefaultProxy ` が使用されるため、このソケットはアプリケーションのデフォルトのプロキシ設定を照会します。

setProxy()、QNetworkProxy 、およびQNetworkProxyFactoryも参照してください 。

[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)

このシグナルは、認証を必要とするproxy が使用された際に発生する可能性があります。その場合、authenticator オブジェクトに必要な詳細情報を入力することで、認証を行い、接続を継続することができます。

注: このシグナルへの接続には QueuedConnection を使用することはできません 。シグナルが戻った時点で、認証オブジェクトに新しい情報が設定されていない場合、接続は失敗するからです。

「 QAuthenticator 」および「QNetworkProxy 」も参照してください 。

qint64 QAbstractSocket::readBufferSize() const

内部の読み取りバッファのサイズを返します。これにより、read() またはreadAll() を呼び出す前に、クライアントが受信できるデータ量が制限されます。

読み取りバッファのサイズが 0(デフォルト)の場合、バッファにサイズ制限がなく、データが失われることがありません。

setReadBufferSize() およびread()も参照してください 。

[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)

QIODevice::readData (char *data, qint64 maxSize)を再実装します。

[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)

QIODevice::readLineData (char *data, qint64 maxSize)を再実装します。

[virtual] void QAbstractSocket::resume()

ソケットでのデータ転送を続行します。このメソッドは、ソケットが通知時に一時停止するように設定され、かつ通知が受信された後にのみ使用してください。現在サポートされている通知は、QSslSocket::sslErrors() のみです。ソケットが一時停止状態でない場合にこのメソッドを呼び出すと、未定義の挙動が生じます。

pauseMode() およびsetPauseMode()も参照してください 。

[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)

接続のローカル側のアドレスをaddress に設定します。

QAbstractSocket のサブクラス内でこの関数を呼び出すことで、接続確立後にlocalAddress()関数の戻り値を変更することができます。この機能は、仮想接続設定を行うプロキシ接続で一般的に使用されます。

なお、この関数は、接続確立前(例:QAbstractSocket::bind())にソケットのローカルアドレスをバインドするものではありません。

localAddress()、setLocalPort()、およびsetPeerAddress()も参照してください 。

[protected] void QAbstractSocket::setLocalPort(quint16 port)

接続のローカル側のポートをport に設定します。

QAbstractSocket のサブクラス内でこの関数を呼び出すことで、接続確立後にlocalPort()関数の戻り値を変更することができます。この機能は、仮想接続の設定を行うプロキシ接続で一般的に使用されます。

なお、この関数は、接続(例:QAbstractSocket::bind())の確立前にソケットのローカルポートをバインドするものではありません。

localPort()、localAddress()、setLocalAddress()、およびsetPeerPort()も参照してください 。

void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)

通知を受信した際に処理を一時停止するかどうかを制御します。pauseMode パラメータは、ソケットを一時停止すべき条件を指定します。 現在サポートされている通知は、QSslSocket::sslErrors() のみです。PauseOnSslErrors に設定すると、ソケット上のデータ転送が一時停止され、resume() を呼び出して明示的に再開する必要があります。デフォルトでは、このオプションはPauseNever に設定されています。このオプションは、サーバーに接続する前に呼び出す必要があります。そうしないと、未定義の挙動を引き起こします。

pauseMode() およびresume()も参照してください 。

[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)

接続のリモート側のアドレスを `address` に設定します。

QAbstractSocket のサブクラス内でこの関数を呼び出すことで、接続確立後にpeerAddress()関数の戻り値を変更することができます。この機能は、仮想接続の設定を行うプロキシ接続で一般的に使用されます。

peerAddress()、setPeerPort()、およびsetLocalAddress()も参照してください 。

[protected] void QAbstractSocket::setPeerName(const QString &name)

リモートピアのホスト名をname に設定します。

QAbstractSocket のサブクラス内でこの関数を呼び出すことで、接続確立後にpeerName()関数の戻り値を変更することができます。この機能は、仮想接続の設定を行うプロキシ接続で一般的に使用されます。

peerName()も参照してください 。

[protected] void QAbstractSocket::setPeerPort(quint16 port)

接続のリモート側のポートをport に設定します。

QAbstractSocket のサブクラス内でこの関数を呼び出すことで、接続確立後にpeerPort()関数の戻り値を変更することができます。この機能は、仮想接続設定のためのプロキシ接続で一般的に使用されます。

peerPort()、setPeerAddress()、およびsetLocalPort()も参照してください 。

void QAbstractSocket::setProtocolTag(const QString &tag)

このソケットのプロトコルタグを「tag 」に設定します。

protocolTag()も参照してください 。

void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)

このソケットの明示的なネットワークプロキシを `networkProxy` に設定します。

このソケットでのプロキシの使用を無効にするには、QNetworkProxy::NoProxy というプロキシタイプを使用します:

socket->setProxy(QNetworkProxy::NoProxy);

プロキシのデフォルト値は `QNetworkProxy::DefaultProxy` です。これは、ソケットがアプリケーションの設定を使用することを意味します。つまり、QNetworkProxy::setApplicationProxy でプロキシが設定されている場合はそれを使用し、そうでない場合は、QNetworkProxyFactory::setApplicationProxyFactory でファクトリが設定されている場合、QNetworkProxyQuery::TcpSocket タイプでそのファクトリに問い合わせを行います。

proxy()、QNetworkProxy 、およびQNetworkProxyFactory::queryProxy()も参照してください 。

[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)

QAbstractSocket の内部読み取りバッファのサイズをsize バイトに設定します。

バッファサイズが特定のサイズに制限されている場合、QAbstractSocket はこのサイズを超えるデータはバッファに格納しません。例外として、バッファサイズが 0 の場合、読み取りバッファに制限はなく、受信したすべてのデータがバッファに格納されます。これがデフォルトの設定です。

このオプションは、特定の時点でのみデータを読み取る場合(例:リアルタイムストリーミングアプリケーション)や、ソケットが過剰なデータを受信して、最終的にアプリケーションのメモリ不足を招くのを防ぎたい場合に役立ちます。

QTcpSocket のみがQAbstractSocket の内部バッファを使用します。QUdpSocket はバッファリングを一切行わず、代わりにオペレーティングシステムが提供する暗黙的なバッファリングに依存します。このため、QUdpSocket に対してこの関数を呼び出しても何の効果もありません。

readBufferSize() およびread()も参照してください 。

[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

ネイティブソケット記述子 `socketDescriptor` を使用して、QAbstractSocket を初期化します。socketDescriptor が有効なソケット記述子として受け入れられた場合は `true ` を返し、そうでない場合は `false` を返します。ソケットは `openMode` で指定されたモードで開かれ、`socketState` で指定されたソケット状態になります。読み取りおよび書き込みバッファはクリアされ、保留中のデータはすべて破棄されます。

注:同じネイティブソケット記述子を使用して、2つの抽象ソケットを初期化することはできません。

socketDescriptor()も参照してください 。

[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)

最後に発生したエラーの種類を `socketError` に設定します。

setSocketState() およびsetErrorString()も参照してください 。

[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

指定されたoption を、value で記述された値に設定します。

注: オプションは内部ソケットに対して設定されるため、 ソケットが作成されている場合にのみ適用されます。これは、bind() の呼び出し後、またはconnected() が発行された場合にのみ保証されます。

socketOption()も参照してください 。

[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)

ソケットの状態をstate に設定します。

state()も参照してください 。

[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)

QIODevice::skipData (qint64 maxSize)を再実装しています。

[virtual] qintptr QAbstractSocket::socketDescriptor() const

QAbstractSocket オブジェクトのネイティブソケット記述子が利用可能な場合はそれを返し、利用できない場合は-1を返します。

ソケットがQNetworkProxy を使用している場合、返される記述子はネイティブのソケット関数では使用できない可能性があります。

QAbstractSocket がUnconnectedState の状態にある場合、ソケット記述子は利用できません。

setSocketDescriptor()も参照してください 。

[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)

option オプションの値を返します。

「setSocketOption()」も参照してください 。

QAbstractSocket::SocketType QAbstractSocket::socketType() const

ソケットのタイプ(TCP、UDP、その他)を返します。

QTcpSocket およびQUdpSocketも参照してください 。

QAbstractSocket::SocketState QAbstractSocket::state() const

ソケットの状態を返します。

error()も参照してください 。

[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)

このシグナルは、QAbstractSocket の状態が変化するたびに発火します。socketState パラメータは新しい状態を表します。

QAbstractSocket::SocketState は登録済みのメタタイプではないため、キュー化された接続の場合は、Q_DECLARE_METATYPE() およびqRegisterMetaType() を使用して登録する必要があります。

state() および「カスタム Qt 型の作成」も参照してください 。

[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)

QIODevice::waitForBytesWritten(int msecs) の再実装です。

この関数は、ソケットに少なくとも1バイトが書き込まれ、bytesWritten() シグナルが発行されるまでブロックします。この関数は、msecs ミリ秒後にタイムアウトします。デフォルトのタイムアウト値は30000ミリ秒です。

bytesWritten() シグナルが発せられた場合、この関数はtrue を返します。それ以外の場合は、エラーが発生した場合や操作がタイムアウトした場合にfalse を返します。

注:この関数は 、Windows 上でランダムに失敗する場合があります。ソフトウェアを Windows 上で実行する場合は、イベントループとbytesWritten() シグナルの使用を検討してください。

関連項目: waitForReadyRead()。

[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)

ソケットが接続されるまで、最大msecs ミリ秒待機します。接続が確立された場合、この関数はtrue を返します。そうでない場合は、false を返します。false が返された場合は、error()を呼び出して、エラーの原因を特定することができます。

次の例では、接続が確立されるまで最大1秒間待機します:

socket->connectToHost("imap", 143);
if(socket->waitForConnected(1000))
    qDebug("Connected!");

msecs が -1 の場合、この関数はタイムアウトしません。

注: ホストの検索が完了するまでの時間によっては、この関数は msecs よりもわずかに長く待機する場合があります。

注:この関数を複数回呼び出しても 、時間は累積されません。関数がタイムアウトした場合、接続中のプロセスは中止されます。

注:この関数は 、Windows ではランダムに失敗する場合があります。ソフトウェアを Windows で実行する場合は、イベントループとconnected() シグナルの使用を検討してください。

関連項目: connectToHost() およびconnected()。

[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)

ソケットの接続が切断されるまで待機します。待機時間は最大msecs ミリ秒です。接続が正常に切断された場合、この関数はtrue を返します。それ以外の場合、false を返します(操作がタイムアウトした場合、エラーが発生した場合、またはこのQAbstractSocket がすでに切断されている場合)。false が返された場合は、error()を呼び出してエラーの原因を特定できます。

次の例は、接続が閉じられるまで最大1秒間待機します:

socket->disconnectFromHost();
if(socket->state()==QAbstractSocket::UnconnectedState
    || socket->waitForDisconnected(1000)) {
        qDebug("Disconnected!");
}

msecs が -1 の場合、この関数はタイムアウトしません。

注:この関数は 、Windows上でランダムに失敗する場合があります。ソフトウェアをWindowsで実行する場合は、イベントループとdisconnected()シグナルの使用を検討してください。

関連項目: disconnectFromHost() およびclose()。

[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)

QIODevice::waitForReadyRead(int msecs) を再実装します。

この関数は、読み取り可能な新しいデータが利用可能になり、readyRead() シグナルが発行されるまで待機します。この関数は、msecs ミリ秒後にタイムアウトします。デフォルトのタイムアウト時間は 30000 ミリ秒です。

readyRead() シグナルが発行され、読み取り可能な新しいデータが存在する場合、この関数はtrue を返します。それ以外の場合(エラーが発生した場合や操作がタイムアウトした場合)、false を返します。

注:この関数は 、Windows 上でランダムに失敗する場合があります。ソフトウェアを Windows 上で実行する場合は、イベントループと `readyRead()` シグナルの使用を検討してください。

関連項目: waitForBytesWritten()。

[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)

QIODevice::writeData(const char *data, qint64 maxSize) を再実装します。

© 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.