QAbstractSocket Class
QAbstractSocketクラスは、全てのソケットタイプに共通する基本機能を提供します。詳細...
Header: | #include <QAbstractSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Inherits: | QIODevice |
Inherited By: | QTcpSocket and QUdpSocket |
- 継承メンバを含む全メンバ一覧
- QAbstractSocketは、Network Programming APIに含まれます。
注意:このクラスの関数は全てリエントラントです。
パブリック型
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, …, PathMtuSocketOption } |
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) |
プロテクト関数
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 はgetChar(),putChar(),ungetChar() もQIODevice から継承しており、これらはシングル・バイトで動作します。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() はソケットにデータが書き込まれるまでブロックする。
- 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の例を参照してください。
注意: シグナルと一緒にブロッキング関数を使用することはお勧めしません。2つの可能性のどちらかを使用すべきです。
QAbstractSocket はQTextStream とQDataStream のストリーム演算子 (operator<<() と operator>>()) と一緒に使うことができます。operator>>() を使ってデータを読み込もうとする前に、十分なデータが利用可能であることを確認する必要があります。
QNetworkAccessManager およびQTcpServerも参照 。
メンバ型ドキュメント
enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode
この enum は、QAbstractSocket::bind() の動作を変更するために渡すことができるさまざまなフラグについて説明します。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::ShareAddress | 0x1 | 他のサービスが同じアドレスとポートにバインドできるようにします。これは、複数のプロセスが同じアドレスとポートをリッスンすることで、 1つのサービスの負荷を共有する場合に便利です (例えば、事前にフォークされた複数のリスナーを持つウェブサーバは、 応答時間を大幅に改善することができます)。しかし、どのサービスでもリバインドが許可されているので、 このオプションはある種のセキュリティ上の考慮が必要である。このオプションとReuseAddressHintを組み合わせることで、既存の共有アドレスのリバインドもサービスに許可されることに注意してください。Unix では、これは SO_REUSEADDR ソケットオプションと同じである。Windowsでは、これはデフォルトの動作なので、このオプションは無視される。 |
QAbstractSocket::DontShareAddress | 0x2 | アドレスとポートを排他的にバインドし、他のサービスがリバインドできないようにする。このオプションをQAbstractSocket::bind() に渡すと、成功時に、そのアドレスとポートをリッスンするのは自分のサービスだけであることが保証される。ReuseAddressHintをパスしても、どのサービスもリバインドを許可されない。このオプションはShareAddressよりもセキュリティが高いですが、OSによっては管理者権限でサーバーを実行する必要があります。UnixとmacOSでは、アドレスとポートをバインドする際のデフォルトの動作は共有しないことなので、このオプションは無視される。Windows では、このオプションは SO_EXCLUSIVEADDRUSE ソケットオプションを使用する。 |
QAbstractSocket::ReuseAddressHint | 0x4 | アドレスとポートがすでに別のソケットによってバインドされている場合でも、サービスを再バインドしようとするヒントをQAbstractSocket に提供する。Windows と Unix では、SO_REUSEADDR ソケットオプションに相当する。 |
QAbstractSocket::DefaultForPlatform | 0x0 | 現在のプラットフォームのデフォルトオプション。Unix と macOS では (DontShareAddress + ReuseAddressHint) に相当し、Windows では ShareAddress に相当する。 |
BindMode型はQFlags<BindFlag>のtypedefである。BindFlag値のORの組み合わせを格納する。
enum QAbstractSocket::NetworkLayerProtocol
この列挙型は、Qt で使用されるネットワーク層のプロトコル値を記述します。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::IPv4Protocol | 0 | IPv4 |
QAbstractSocket::IPv6Protocol | 1 | IPv6 |
QAbstractSocket::AnyIPProtocol | 2 | IPv4またはIPv6のいずれか |
QAbstractSocket::UnknownNetworkLayerProtocol | -1 | IPv4およびIPv6以外 |
QHostAddress::protocol()も参照 。
enum QAbstractSocket::PauseMode
flags QAbstractSocket::PauseModes
この列挙型は、ソケットがデータ転送を保留する場合の動作を記述します。現在サポートされている唯一の通知はQSslSocket::sslErrors() です。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::PauseNever | 0x0 | ソケットのデータ転送を一時停止しない。これはデフォルトであり、Qt 4 の動作と同じです。 |
QAbstractSocket::PauseOnSslErrors | 0x1 | SSLエラー通知受信時にソケットのデータ転送を一時停止する。例:QSslSocket::sslErrors()。 |
PauseModes型はQFlags<PauseMode>のtypedefである。PauseMode の値の OR の組み合わせを格納する。
enum QAbstractSocket::SocketError
この列挙型は発生する可能性のあるソケットエラーを記述します。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::ConnectionRefusedError | 0 | 接続が相手によって拒否された(またはタイムアウトした)。 |
QAbstractSocket::RemoteHostClosedError | 1 | リモートホストが接続をクローズした。クライアントソケット(つまりこのソケット)は、リモートクローズ通知の送信後にクローズされることに注意。 |
QAbstractSocket::HostNotFoundError | 2 | ホストアドレスが見つからなかった。 |
QAbstractSocket::SocketAccessError | 3 | アプリケーションに必要な権限がないため、ソケット操作に失敗した。 |
QAbstractSocket::SocketResourceError | 4 | ローカルシステムのリソースが不足した(ソケット数が多すぎるなど)。 |
QAbstractSocket::SocketTimeoutError | 5 | ソケット操作がタイムアウトした。 |
QAbstractSocket::DatagramTooLargeError | 6 | データグラムがオペレーティングシステムの制限値(8192バイトなど)よりも大きかった。 |
QAbstractSocket::NetworkError | 7 | ネットワークでエラーが発生した(ネットワークケーブルが誤って抜かれたなど)。 |
QAbstractSocket::AddressInUseError | 8 | QAbstractSocket::bind() に指定されたアドレスがすでに使用されており、排他的に設定されていた。 |
QAbstractSocket::SocketAddressNotAvailableError | 9 | QAbstractSocket::bind() に指定されたアドレスがホストに属していない。 |
QAbstractSocket::UnsupportedSocketOperationError | 10 | 要求されたソケット操作がローカルオペレーティングシステムでサポートされていない(例えば IPv6 がサポートされていない)。 |
QAbstractSocket::ProxyAuthenticationRequiredError | 12 | ソケットがプロキシを使用しており、プロキシが認証を要求している。 |
QAbstractSocket::SslHandshakeFailedError | 13 | SSL/TLS ハンドシェイクに失敗したため、接続を切断した (QSslSocket でのみ使用) |
QAbstractSocket::UnfinishedSocketOperationError | 11 | QAbstractSocketEngine でのみ使用され、最後に試行された操作はまだ終了していない(バックグラウンドで進行中)。 |
QAbstractSocket::ProxyConnectionRefusedError | 14 | プロキシサーバへの接続が拒否されたため、プロキシサーバに接続できませんでした。 |
QAbstractSocket::ProxyConnectionClosedError | 15 | プロキシ・サーバへの接続が予期せず切断された (最終ピアへの接続が確立される前) |
QAbstractSocket::ProxyConnectionTimeoutError | 16 | プロキシサーバへの接続がタイムアウトしたか、プロキシサーバが認証フェーズで応答しなくなった。 |
QAbstractSocket::ProxyNotFoundError | 17 | setProxy() (またはアプリケーション・プロキシ) で設定したプロキシ・アドレスが見つからなかった。 |
QAbstractSocket::ProxyProtocolError | 18 | プロキシサーバからの応答を理解できず、プロキシサーバとの接続ネゴシエーションに失敗した。 |
QAbstractSocket::OperationError | 19 | ソケットが許可されていない状態で操作を試みた。 |
QAbstractSocket::SslInternalError | 20 | 使用中の SSL ライブラリが内部エラーを報告した。これはおそらくライブラリのインストールミスか設定ミスの結果です。 |
QAbstractSocket::SslInvalidUserDataError | 21 | 無効なデータ(証明書、鍵、サイファーなど)が提供され、その使用によってSSLライブラリでエラーが発生した。 |
QAbstractSocket::TemporaryError | 22 | 一時的なエラーが発生した(例: 操作がブロックされ、ソケットがノンブロッキングである)。 |
QAbstractSocket::UnknownSocketError | -1 | 不明なエラーが発生した。 |
QAbstractSocket::error() およびQAbstractSocket::errorOccurred()も参照 。
enum QAbstractSocket::SocketOption
この列挙型はソケットに設定可能なオプションを表す。必要であれば、ソケットからconnected() シグナルを受信した後、またはQTcpServer から新しいソケットを受信した後に設定できる。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::LowDelayOption | 0 | ソケットを低レイテンシに最適化しようとする。QTcpSocket の場合、TCP_NODELAY オプションを設定し、Nagle アルゴリズムを無効にする。有効にするには 1 を設定する。 |
QAbstractSocket::KeepAliveOption | 1 | SO_KEEPALIVE ソケットオプションを有効にする場合は 1 を設定する。 |
QAbstractSocket::MulticastTtlOption | 2 | IP_MULTICAST_TTL (マルチキャストデータグラムのTTL) ソケットオプションを設定するために整数値を設定する。 |
QAbstractSocket::MulticastLoopbackOption | 3 | IP_MULTICAST_LOOP (マルチキャストループバック) ソケットオプションを有効にするには、このオプションを 1 に設定する。 |
QAbstractSocket::TypeOfServiceOption | 4 | このオプションは Windows ではサポートされていない。これは IP_TOS ソケットオプションに対応する。設定可能な値は以下の表を参照。 |
QAbstractSocket::SendBufferSizeSocketOption | 5 | ソケットの送信バッファサイズを OS レベルでバイト単位で設定する。SO_SNDBUF ソケットオプションに対応する。このオプションはQIODevice またはQAbstractSocket バッファには影響しない。この enum 値は Qt 5.3 で導入された。 |
QAbstractSocket::ReceiveBufferSizeSocketOption | 6 | ソケットの受信バッファサイズを OS レベルでバイト単位で設定する。これは SO_RCVBUF ソケットオプションに対応する。このオプションはQIODevice やQAbstractSocket バッファには影響しない(setReadBufferSize() を参照)。この列挙値は Qt 5.3 で導入された。 |
QAbstractSocket::PathMtuSocketOption | 7 | もしあれば、IP スタックが現在知っている Path Maximum Transmission Unit (PMTU) 値を取得する。IPスタックによっては、送信のためにMTUを設定することもできます。この列挙値はQt 5.11で導入されました。 |
TypeOfServiceOptionに指定できる値は以下のとおりです:
値 | 説明 |
---|---|
224 | ネットワーク制御 |
192 | インターネットネットワーク制御 |
160 | CRITIC/ECP |
128 | フラッシュオーバーライド |
96 | フラッシュ |
64 | 即時 |
32 | 優先順位 |
0 | ルーチン |
QAbstractSocket::setSocketOption() およびQAbstractSocket::socketOption()も参照のこと 。
enum QAbstractSocket::SocketState
この列挙型は、ソケットが取り得る様々な状態を記述する。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::UnconnectedState | 0 | ソケットは接続されていない。 |
QAbstractSocket::HostLookupState | 1 | ソケットがホスト名検索を実行している。 |
QAbstractSocket::ConnectingState | 2 | ソケットが接続の確立を開始した。 |
QAbstractSocket::ConnectedState | 3 | 接続が確立された。 |
QAbstractSocket::BoundState | 4 | ソケットがアドレスとポートにバインドされている。 |
QAbstractSocket::ClosingState | 6 | ソケットがクローズしようとしている(データの書き込みを待っている可能性がある) |
QAbstractSocket::ListeningState | 5 | 内部使用のみ。 |
QAbstractSocket::state()も参照のこと 。
enum QAbstractSocket::SocketType
この列挙型はトランスポート層のプロトコルを記述する。
定数 | 値 | 説明 |
---|---|---|
QAbstractSocket::TcpSocket | 0 | TCP |
QAbstractSocket::UdpSocket | 1 | UDP |
QAbstractSocket::SctpSocket | 2 | SCTP |
QAbstractSocket::UnknownSocketType | -1 | TCP、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)
BindMode mode を使用して、ポートport 上のaddress にバインドする。
UDPソケットの場合、バインド後、指定したアドレスとポートにUDPデータグラムが到着するたびにシグナルQUdpSocket::readyRead() が発せられる。したがって、この関数はUDPサーバーを記述するのに便利である。
TCPソケットの場合、この関数を使用して、発信接続に使用するインタフェースを指定することができる。
デフォルトでは、ソケットはDefaultForPlatform BindMode を使ってバインドされる。ポートが指定されない場合、ランダムなポートが選択される。
false
成功すると、この関数はtrue
を返し、ソケットはBoundState に入る。
bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
これはオーバーロードされた関数である。
BindMode mode を使ってQHostAddress:Any on portport にバインドする。
デフォルトでは、ソケットは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 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() が呼び出され、接続が正常に確立された後に発せられる。
注意: オペレーティング・システムによっては、connected() シグナルがconnectToHost() 呼び出しから直接発せられることがある。
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
を返します。
バッファリングされたデータの送信をすぐに開始する必要がある場合は、この関数を呼び出します(QAbstractSocket )。正常に書き込まれたバイト数はオペレーティング・システムに依存する。制御がイベント・ループに戻ると、QAbstractSocket が自動的にデータ送信を開始するので、ほとんどの場合、この関数を呼び出す必要はない。イベント・ループがない場合は、代わりにwaitForBytesWritten() を呼び出す。
write() およびwaitForBytesWritten()も参照 。
[signal]
void QAbstractSocket::hostFound()
このシグナルは、connectToHost() が呼び出され、ホスト検索が成功した後に発行されます。
QAbstractSocket 注意: Qt 4.6.3 以降では、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
ローカルソケットのホストポート番号(ネイティブバイト順)を返す。
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 にある場合、接続相手のポートを返す。
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 に設定されている。 このオプションはサーバに接続する前に呼び出す必要があり、そうしないと未定義の動作になる。
[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 に記述された値に設定する。
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)
reimplementsを参照してください:QIODevice::waitForBytesWritten(int msecs).
この関数は、少なくとも1バイトがソケットに書き込まれ、bytesWritten() シグナルが発せられるまでブロックする。この関数はmsecs ミリ秒後にタイムアウトする。デフォルトのタイムアウト時間は 30000 ミリ秒である。
デフォルトのタイムアウト時間は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) を再実装しています。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。