QUdpSocket Class
QUdpSocket 클래스는 UDP 소켓을 제공합니다. 더 보기...
헤더: | #include <QUdpSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
상속합니다: | QAbstractSocket |
- 상속된 멤버를 포함한 모든 멤버 목록
- QUdpSocket은 네트워크 프로그래밍 API의 일부입니다.
참고: 이 클래스의 모든 함수는 재인용됩니다.
공용 함수
QUdpSocket(QObject *parent = nullptr) | |
virtual | ~QUdpSocket() |
bool | hasPendingDatagrams() const |
bool | joinMulticastGroup(const QHostAddress &groupAddress) |
bool | joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface) |
bool | leaveMulticastGroup(const QHostAddress &groupAddress) |
bool | leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface) |
QNetworkInterface | multicastInterface() const |
qint64 | pendingDatagramSize() const |
qint64 | readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr) |
QNetworkDatagram | receiveDatagram(qint64 maxSize = -1) |
void | setMulticastInterface(const QNetworkInterface &iface) |
qint64 | writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port) |
qint64 | writeDatagram(const QNetworkDatagram &datagram) |
qint64 | writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port) |
상세 설명
UDP(사용자 데이터그램 프로토콜)는 가볍고 신뢰할 수 없는 데이터그램 지향의 비연결 프로토콜입니다. 안정성이 중요하지 않을 때 사용할 수 있습니다. QUdpSocket은 UDP 데이터그램을 주고받을 수 있는 QAbstractSocket 의 서브클래스입니다.
이 클래스를 사용하는 가장 일반적인 방법은 bind()를 사용하여 주소와 포트에 바인딩한 다음 writeDatagram() 및 readDatagram() / receiveDatagram()를 호출하여 데이터를 전송하는 것입니다. 표준 QIODevice 함수 read(), readLine(), write() 등을 사용하려면 먼저 connectToHost()를 호출하여 소켓을 피어에 직접 연결해야 합니다.
소켓은 데이터그램이 네트워크에 기록될 때마다 bytesWritten() 신호를 보냅니다. 데이터그램만 전송하려는 경우 bind()를 호출할 필요가 없습니다.
readyRead() 신호는 데이터그램이 도착할 때마다 전송됩니다. 이 경우 hasPendingDatagrams()는 true
을 반환합니다. pendingDatagramSize ()를 호출하여 첫 번째 보류 중인 데이터그램의 크기를 얻고 readDatagram() 또는 receiveDatagram()를 호출하여 읽습니다.
참고: 수신 데이터그램은 readyRead() 신호를 수신할 때 읽어야 하며, 그렇지 않으면 다음 데이터그램에 대해 이 신호가 전송되지 않습니다.
예시:
void Server::initSocket() { udpSocket = new QUdpSocket(this); udpSocket->bind(QHostAddress::LocalHost, 7755); connect(udpSocket, &QUdpSocket::readyRead, this, &Server::readPendingDatagrams); } void Server::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QNetworkDatagram datagram = udpSocket->receiveDatagram(); processTheDatagram(datagram); } }
QUdpSocket은 UDP 멀티캐스트도 지원합니다. joinMulticastGroup () 및 leaveMulticastGroup()를 사용하여 그룹 멤버십을 제어하고 QAbstractSocket::MulticastTtlOption 및 QAbstractSocket::MulticastLoopbackOption 를 사용하여 TTL 및 루프백 소켓 옵션을 설정합니다. 멀티캐스트 데이터그램의 발신 인터페이스를 제어하려면 setMulticastInterface()를, 쿼리하려면 multicastInterface()를 사용합니다.
또한 connectToHost()를 사용하여 UDP 서버에 가상 연결을 설정한 다음 read() 및 write()를 사용하여 각 데이터그램에 대한 수신자를 지정하지 않고 데이터그램을 교환할 수 있습니다.
브로드캐스트 발신자, 브로드캐스트 수신자, 멀티캐스트 발신자 및 멀티캐스트 수신자 예제에서는 애플리케이션에서 QUdpSocket을 사용하는 방법을 설명합니다.
QTcpSocket 와 QNetworkDatagram 를참조하세요 .
멤버 함수 문서
[explicit]
QUdpSocket::QUdpSocket(QObject *parent = nullptr)
QUdpSocket 객체를 생성합니다.
parent 는 QObject 생성자에 전달됩니다.
socketType()도 참조하세요 .
[virtual noexcept]
QUdpSocket::~QUdpSocket()
소켓을 파괴하고 필요한 경우 연결을 닫습니다.
close()도 참조하세요 .
bool QUdpSocket::hasPendingDatagrams() const
하나 이상의 데이터그램이 읽기를 대기 중이면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
pendingDatagramSize() 및 readDatagram()도 참조하세요 .
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress)
운영 체제에서 선택한 기본 인터페이스에서 groupAddress 에 지정된 멀티캐스트 그룹에 가입합니다. 소켓은 바운드 상태여야 하며, 그렇지 않으면 오류가 발생합니다.
IPv4 그룹에 가입하려는 경우 IPv6(또는 이중 모드에서 QHostAddress::Any)를 사용하여 소켓을 바인딩해서는 안 됩니다. 대신 QHostAddress::AnyIPv4 을 사용해야 합니다.
이 함수는 성공하면 true
을 반환하고, 그렇지 않으면 false
을 반환하고 그에 따라 소켓 오류를 설정합니다.
참고: 인터페이스를 선택하지 않고 IPv6 멀티캐스트 그룹에 참여하는 것은 모든 운영 체제에서 지원되지 않습니다. 인터페이스가 지정된 곳에서 오버로드를 사용하는 것이 좋습니다.
leaveMulticastGroup()도 참조하세요 .
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
이것은 과부하된 함수입니다.
인터페이스 iface 에서 멀티캐스트 그룹 주소 groupAddress 에 가입합니다.
leaveMulticastGroup()도 참조하세요 .
bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress)
운영 체제에서 선택한 기본 인터페이스에 groupAddress 으로 지정된 멀티캐스트 그룹을 남깁니다. 소켓은 BoundState 상태여야 하며, 그렇지 않으면 오류가 발생합니다.
이 함수는 성공하면 true
을 반환하고, 그렇지 않으면 false
을 반환하고 그에 따라 소켓 오류를 설정합니다.
참고: 이 함수는 joinMulticastGroup()에 전달된 것과 동일한 인수를 사용하여 호출해야 합니다.
joinMulticastGroup()도 참조하세요 .
bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
이것은 과부하된 함수입니다.
iface 인터페이스에서 groupAddress 으로 지정된 멀티캐스트 그룹을 떠납니다.
참고: 이 함수는 joinMulticastGroup()에 전달된 것과 동일한 인수를 사용하여 호출해야 합니다.
joinMulticastGroup()도 참조하세요 .
QNetworkInterface QUdpSocket::multicastInterface() const
멀티캐스트 데이터그램을 위한 송신 인터페이스의 인터페이스를 반환합니다. 이는 IPv4 소켓의 경우 IP_MULTICAST_IF 소켓 옵션에 해당하고, IPv6 소켓의 경우 IPV6_MULTICAST_IF 소켓 옵션에 해당합니다. 이전에 설정된 인터페이스가 없는 경우 이 함수는 잘못된 QNetworkInterface 을 반환합니다. 소켓이 BoundState에 있어야 하며, 그렇지 않으면 잘못된 QNetworkInterface 이 반환됩니다.
setMulticastInterface()도 참조하세요 .
qint64 QUdpSocket::pendingDatagramSize() const
보류 중인 첫 번째 UDP 데이터그램의 크기를 반환합니다. 사용 가능한 데이터그램이 없는 경우 이 함수는 -1을 반환합니다.
hasPendingDatagrams() 및 readDatagram()도 참조하세요 .
qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)
maxSize 바이트보다 크지 않은 데이터그램을 수신하여 data 에 저장합니다. 발신자의 호스트 주소와 포트는 *address 및 *port 에 저장됩니다(포인터가 nullptr
인 경우 제외).
성공하면 데이터그램의 크기를 반환하고, 그렇지 않으면 -1을 반환합니다.
maxSize 이 너무 작으면 나머지 데이터그램은 손실됩니다. 데이터 손실을 방지하려면 pendingDatagramSize()를 호출하여 보류 중인 데이터그램의 크기를 확인한 후 읽기를 시도하세요. maxSize 이 0이면 데이터그램이 삭제됩니다.
writeDatagram(), hasPendingDatagrams() 및 pendingDatagramSize()도 참조하세요 .
QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize = -1)
maxSize 바이트보다 크지 않은 데이터그램을 수신하여 발신자의 호스트 주소 및 포트와 함께 QNetworkDatagram 객체로 반환합니다. 가능한 경우 이 함수는 수신 시 데이터그램의 목적지 주소, 포트, 홉 카운트 수도 확인하려고 시도합니다.
실패하면 not valid 을 보고하는 QNetworkDatagram 을 반환합니다.
maxSize 이 너무 작으면 나머지 데이터그램은 손실됩니다. maxSize 이 0이면 데이터그램이 삭제됩니다. maxSize 가 -1(기본값)이면 이 함수는 전체 데이터그램을 읽으려고 시도합니다.
writeDatagram(), hasPendingDatagrams() 및 pendingDatagramSize()도 참조하세요 .
void QUdpSocket::setMulticastInterface(const QNetworkInterface &iface)
멀티캐스트 데이터그램의 발신 인터페이스를 iface 인터페이스로 설정합니다. 이는 IPv4 소켓의 경우 IP_MULTICAST_IF 소켓 옵션에 해당하고, IPv6 소켓의 경우 IPV6_MULTICAST_IF 소켓 옵션에 해당합니다. 소켓이 바운드 상태에 있어야 하며, 그렇지 않으면 이 함수는 아무 작업도 수행하지 않습니다.
multicastInterface(), joinMulticastGroup() 및 leaveMulticastGroup()도 참조하세요 .
qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
data 포트 port 에서 호스트 주소 address 로 크기 size 의 데이터그램을 전송합니다. 성공하면 전송된 바이트 수를 반환하고, 그렇지 않으면 -1을 반환합니다.
데이터그램은 항상 하나의 블록으로 작성됩니다. 데이터그램의 최대 크기는 플랫폼에 따라 다르지만 8192바이트까지 가능합니다. 데이터그램이 너무 크면 이 함수는 -1을 반환하고 error()는 DatagramTooLargeError를 반환합니다.
512바이트보다 큰 데이터그램을 전송하는 것은 일반적으로 바람직하지 않습니다. 성공적으로 전송되더라도 최종 목적지에 도착하기 전에 IP 계층에서 조각화될 가능성이 높기 때문입니다.
경고: 연결된 UDP 소켓에서 이 함수를 호출하면 오류가 발생하고 패킷이 전송되지 않을 수 있습니다. 연결된 소켓을 사용하는 경우 write()를 사용하여 데이터그램을 전송하세요.
readDatagram() 및 write()도 참조하세요 .
qint64 QUdpSocket::writeDatagram(const QNetworkDatagram &datagram)
이 함수는 오버로드된 함수입니다.
네트워크 인터페이스와 홉 수 제한을 사용하여 datagram 에 포함된 호스트 주소와 포트 번호로 datagram 데이터그램을 보냅니다. 대상 주소와 포트 번호가 설정되지 않은 경우 이 함수는 connectToHost()에 전달된 주소로 전송합니다.
대상 주소가 비어 있지 않은 scope id 이지만 datagram 의 인터페이스 인덱스와 다른 IPv6 인 경우 운영 체제에서 어떤 인터페이스로 전송할지 정의되지 않습니다.
이 함수는 전송에 성공하면 전송된 바이트 수를 반환하고 오류가 발생하면 -1을 반환합니다.
경고: 연결된 UDP 소켓에서 이 함수를 호출하면 오류가 발생하고 패킷이 전송되지 않을 수 있습니다. 연결된 소켓을 사용하는 경우 write()를 사용하여 데이터그램을 전송하세요.
QNetworkDatagram::setDestination(), QNetworkDatagram::setHopLimit() 및 QNetworkDatagram::setInterfaceIndex()도 참조하세요 .
qint64 QUdpSocket::writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
이것은 과부하된 함수입니다.
호스트 주소 host 및 포트 port 로 데이터그램 datagram 을 보냅니다.
이 함수는 성공하면 전송된 바이트 수를 반환하고 오류가 발생하면 -1을 반환합니다.
© 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.