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(User Datagram Protocol)는 경량이고, 비신뢰적이며, 데이터그램 지향적이고, 연결이 필요 없는 프로토콜입니다. 신뢰성이 중요하지 않은 경우에 사용할 수 있습니다. QUdpSocket은 QAbstractSocket 의 하위 클래스로, UDP 데이터그램을 송수신할 수 있게 해줍니다.
이 클래스를 사용하는 가장 일반적인 방법은 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()를 사용하여 이를 조회할 수 있습니다.
또한 QUdpSocket을 사용하면 connectToHost()를 통해 UDP 서버에 대한 가상 연결을 설정하고, read() 및 write()를 사용하여 각 데이터그램의 수신자를 별도로 지정하지 않고도 데이터그램을 주고받을 수 있습니다.
Broadcast Sender, Broadcast Receiver, Multicast Sender 및 Multicast Receiver 예제는 애플리케이션에서 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 로 지정된 멀티캐스트 그룹에 가입합니다. 소켓은 BoundState 상태여야 하며, 그렇지 않으면 오류가 발생합니다.
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 소켓 옵션에 해당합니다. 소켓은 BoundState 상태여야 하며, 그렇지 않으면 이 함수는 아무 작업도 수행하지 않습니다.
multicastInterface(), joinMulticastGroup() 및 leaveMulticastGroup()도 참조하십시오 .
qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
data 에 위치한 크기가 size 인 데이터그램을 포트 port 의 호스트 주소 address 로 전송합니다. 성공 시 전송된 바이트 수를 반환하고, 그렇지 않으면 -1을 반환합니다.
데이터그램은 항상 하나의 블록으로 작성됩니다. 데이터그램의 최대 크기는 플랫폼에 따라 크게 달라지지만, 최소 8192바이트까지 낮을 수 있습니다. 데이터그램이 너무 크면 이 함수는 -1을 반환하고, error()는 DatagramTooLargeError를 반환합니다.
512바이트보다 큰 데이터그램을 전송하는 것은 일반적으로 권장되지 않습니다. 성공적으로 전송되더라도 최종 목적지에 도달하기 전에 IP 계층에서 조각화될 가능성이 높기 때문입니다.
경고: 연결된 UDP 소켓에서 이 함수를호출하면 오류가 발생하여 패킷이 전송되지 않을 수 있습니다. 연결된 소켓을 사용하는 경우, write()를 사용하여 데이터그램을 전송하십시오.
readDatagram() 및 write()도 참조하십시오 .
qint64 QUdpSocket::writeDatagram(const QNetworkDatagram &datagram)
datagram 에 포함된 데이터그램을, datagram 에 명시된 호스트 주소와 포트 번호로, 또한 해당 파일에 설정된 네트워크 인터페이스 및 홉 수 제한을 사용하여 전송합니다. 목적지 주소와 포트 번호가 설정되지 않은 경우, 이 함수는 connectToHost()에 전달된 주소로 전송합니다.
목적지 주소가 IPv6이고 scope id 가 비어 있지 않으나 datagram 의 인터페이스 인덱스와 다른 경우, 운영 체제가 전송에 어떤 인터페이스를 선택할지는 정의되지 않습니다.
이 함수는 성공하면 전송된 바이트 수를 반환하고, 오류가 발생하면 -1을 반환합니다.
경고: 연결된 UDP 소켓에서 이 함수를호출하면 오류가 발생하고 패킷이 전송되지 않을 수 있습니다. 연결된 소켓을 사용하는 경우, write()을 사용하여 데이터그램을 전송하십시오.
이 함수는 오버로드된 함수입니다.
QNetworkDatagram::setDestination(), QNetworkDatagram::setHopLimit() 및 QNetworkDatagram::setInterfaceIndex()도 참조하십시오 .
qint64 QUdpSocket::writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
datagram 데이터그램을 호스트 주소 host 의 포트 port 로 전송합니다.
이 함수는 성공하면 전송된 바이트 수를 반환하고, 오류가 발생하면 -1을 반환합니다.
이 함수는 오버로드된 함수입니다.
© 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.