本文整理汇总了C++中QHostAddress::protocol方法的典型用法代码示例。如果您正苦于以下问题:C++ QHostAddress::protocol方法的具体用法?C++ QHostAddress::protocol怎么用?C++ QHostAddress::protocol使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QHostAddress
的用法示例。
在下文中一共展示了QHostAddress::protocol方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setPortAndAddress
void setPortAndAddress(quint16 port, const QHostAddress &address, QAbstractSocket::NetworkLayerProtocol socketProtocol, qt_sockaddr *aa, int *sockAddrSize)
{
if (address.protocol() == QAbstractSocket::IPv6Protocol
|| address.protocol() == QAbstractSocket::AnyIPProtocol
|| socketProtocol == QAbstractSocket::IPv6Protocol
|| socketProtocol == QAbstractSocket::AnyIPProtocol) {
memset(&aa->a6, 0, sizeof(sockaddr_in6));
aa->a6.sin6_family = AF_INET6;
//#if QT_CONFIG(networkinterface)
// aa->a6.sin6_scope_id = scopeIdFromString(address.scopeId());
//#endif
aa->a6.sin6_port = htons(port);
Q_IPV6ADDR tmp = address.toIPv6Address();
memcpy(&aa->a6.sin6_addr, &tmp, sizeof(tmp));
*sockAddrSize = sizeof(sockaddr_in6);
SetSALen::set(&aa->a, sizeof(sockaddr_in6));
} else {
memset(&aa->a, 0, sizeof(sockaddr_in));
aa->a4.sin_family = AF_INET;
aa->a4.sin_port = htons(port);
aa->a4.sin_addr.s_addr = htonl(address.toIPv4Address());
*sockAddrSize = sizeof(sockaddr_in);
SetSALen::set(&aa->a, sizeof(sockaddr_in));
}
}
示例2: sp_set_request
// connectRequest
static QByteArray sp_set_request(const QHostAddress &addr, unsigned short port, unsigned char cmd1)
{
int at = 0;
QByteArray a;
a.resize(4);
a[at++] = 0x05; // socks version 5
a[at++] = cmd1;
a[at++] = 0x00; // reserved
if(addr.protocol() == QAbstractSocket::IPv4Protocol || addr.protocol() == QAbstractSocket::UnknownNetworkLayerProtocol) {
a[at++] = 0x01; // address type = ipv4
quint32 ip4 = htonl(addr.toIPv4Address());
a.resize(at+4);
memcpy(a.data() + at, &ip4, 4);
at += 4;
}
else {
a[at++] = 0x04;
Q_IPV6ADDR ip6 = addr.toIPv6Address();
a.resize(at+16);
for(int i = 0; i < 16; ++i)
a[at++] = ip6[i];
}
// port
a.resize(at+2);
quint16 p = htons(port);
memcpy(a.data() + at, &p, 2);
return a;
}
示例3: memset
/*! \internal
Sets the port and address to a sockaddr. Requires that sa point to the IPv6 struct if the address is IPv6.
*/
static inline void qt_socket_setPortAndAddress(SOCKET socketDescriptor, sockaddr_in * sockAddrIPv4, qt_sockaddr_in6 * sockAddrIPv6,
quint16 port, const QHostAddress & address, sockaddr ** sockAddrPtr, QT_SOCKLEN_T *sockAddrSize)
{
#if !defined(QT_NO_IPV6)
if (address.protocol() == QAbstractSocket::IPv6Protocol) {
memset(sockAddrIPv6, 0, sizeof(qt_sockaddr_in6));
sockAddrIPv6->sin6_family = AF_INET6;
sockAddrIPv6->sin6_scope_id = address.scopeId().toInt();
WSAHtons(socketDescriptor, port, &(sockAddrIPv6->sin6_port));
Q_IPV6ADDR tmp = address.toIPv6Address();
memcpy(&(sockAddrIPv6->sin6_addr.qt_s6_addr), &tmp, sizeof(tmp));
*sockAddrSize = sizeof(qt_sockaddr_in6);
*sockAddrPtr = (struct sockaddr *) sockAddrIPv6;
} else
#endif
if (address.protocol() == QAbstractSocket::IPv4Protocol
|| address.protocol() == QAbstractSocket::UnknownNetworkLayerProtocol) {
memset(sockAddrIPv4, 0, sizeof(sockaddr_in));
sockAddrIPv4->sin_family = AF_INET;
WSAHtons(socketDescriptor, port, &(sockAddrIPv4->sin_port));
WSAHtonl(socketDescriptor, address.toIPv4Address(), &(sockAddrIPv4->sin_addr.s_addr));
*sockAddrSize = sizeof(sockaddr_in);
*sockAddrPtr = (struct sockaddr *) sockAddrIPv4;
} else {
// unreachable
}
}
示例4: nativeSendDatagram
qint64 QNativeSocketEnginePrivate::nativeSendDatagram(const char *data, qint64 len,
const QHostAddress &host, quint16 port)
{
struct sockaddr_in sockAddrIPv4;
struct sockaddr *sockAddrPtr = 0;
QT_SOCKLEN_T sockAddrSize = 0;
#if !defined(QT_NO_IPV6)
struct sockaddr_in6 sockAddrIPv6;
if (host.protocol() == QAbstractSocket::IPv6Protocol) {
memset(&sockAddrIPv6, 0, sizeof(sockAddrIPv6));
sockAddrIPv6.sin6_family = AF_INET6;
sockAddrIPv6.sin6_port = htons(port);
Q_IPV6ADDR tmp = host.toIPv6Address();
memcpy(&sockAddrIPv6.sin6_addr.s6_addr, &tmp, sizeof(tmp));
QString scopeid = host.scopeId();
bool ok;
sockAddrIPv6.sin6_scope_id = scopeid.toInt(&ok);
#ifndef QT_NO_IPV6IFNAME
if (!ok)
sockAddrIPv6.sin6_scope_id = ::if_nametoindex(scopeid.toLatin1());
#endif
sockAddrSize = sizeof(sockAddrIPv6);
sockAddrPtr = (struct sockaddr *)&sockAddrIPv6;
} else
#endif
if (host.protocol() == QAbstractSocket::IPv4Protocol) {
memset(&sockAddrIPv4, 0, sizeof(sockAddrIPv4));
sockAddrIPv4.sin_family = AF_INET;
sockAddrIPv4.sin_port = htons(port);
sockAddrIPv4.sin_addr.s_addr = htonl(host.toIPv4Address());
sockAddrSize = sizeof(sockAddrIPv4);
sockAddrPtr = (struct sockaddr *)&sockAddrIPv4;
}
// ignore the SIGPIPE signal
qt_ignore_sigpipe();
ssize_t sentBytes = qt_safe_sendto(socketDescriptor, data, len,
0, sockAddrPtr, sockAddrSize);
if (sentBytes < 0) {
switch (errno) {
case EMSGSIZE:
setError(QAbstractSocket::DatagramTooLargeError, DatagramTooLargeErrorString);
break;
default:
setError(QAbstractSocket::NetworkError, SendDatagramErrorString);
}
}
#if defined (QNATIVESOCKETENGINE_DEBUG)
qDebug("QNativeSocketEngine::sendDatagram(%p \"%s\", %lli, \"%s\", %i) == %lli", data,
qt_prettyDebug(data, qMin<int>(len, 16), len).data(), len, host.toString().toLatin1().constData(),
port, (qint64) sentBytes);
#endif
return qint64(sentBytes);
}
示例5: targetConnectedHandler
void Worker::targetConnectedHandler(void)
{
this->m_target = new QTcpSocket(this);
this->m_connector->assignTo(this->m_target);
delete this->m_connector;
this->m_connector = 0;
union {
quint32 v4;
Q_IPV6ADDR v6;
quint16 port;
char ptr;
} data;
QByteArray response("\x05\x00\x00", 3);
QHostAddress a;
if (qobject_cast<QAbstractSocket*>(this->m_peer)) {
a = (qobject_cast<QAbstractSocket*>(this->m_peer))->peerAddress();
}
if (a.protocol() == QAbstractSocket::IPv4Protocol) {
response.append('\x01');
data.v4 = qToBigEndian(a.toIPv4Address());
response.append(QByteArray::fromRawData(&data.ptr, sizeof(data.v4)));
}
else if (a.protocol() == QAbstractSocket::IPv6Protocol) {
response.append('\x04');
data.v6 = a.toIPv6Address();
response.append(QByteArray::fromRawData(&data.ptr, sizeof(data.v6)));
}
else {
Q_ASSERT(false);
}
if (qobject_cast<QAbstractSocket*>(this->m_peer)) {
data.port = qToBigEndian<quint16>((qobject_cast<QAbstractSocket*>(this->m_peer))->peerPort());
}
else {
data.port = 0;
}
response.append(QByteArray::fromRawData(&data.ptr, sizeof(data.port)));
QObject::connect(this->m_target, SIGNAL(readyRead()), this, SLOT(targetReadyReadHandler()));
QObject::connect(this->m_target, SIGNAL(disconnected()), this, SLOT(disconnectHandler()));
if (this->writeAndFlush(this->m_peer, response) == response.size()) {
this->m_state = Worker::ConnectionProxiedState;
}
else {
if (this->m_peer) {
this->m_peer->close();
}
this->m_state = Worker::FatalErrorState;
}
}
示例6: WriteSocksReply
void SocksConnection::WriteSocksReply(SocksReplyCode reason,
const QHostAddress &addr, quint16 port)
{
QHostAddress a = (addr.isNull() || addr.protocol() != QAbstractSocket::IPv4Protocol)
? QHostAddress("8.8.8.8") : addr;
QByteArray reply(4, 0);
reply[0] = (uchar)SocksVersion_5; // Protocol version
reply[1] = reason; // Reply
reply[2] = 0x00; // Reserved
reply[3] = SocksAddress_IPv4; // Address type
// reply[4] IP Octet 1
// reply[5] IP Octet 2
// reply[6] IP Octet 3
// reply[7] IP Octet 3
// reply[8] Port Octet 1
// reply[9] Port Octet 1
QDataStream stream(&reply, QIODevice::Append);
stream.setByteOrder(QDataStream::BigEndian);
stream << a.toIPv4Address();
stream << port;
for(int i=0;i<reply.count();i++) {
qDebug() << "SOCKS reply" << i << "|" << (unsigned char)reply[i];
}
TryWrite(reply);
}
示例7: tryToConnectToTheNextAddress
void InternalCoreConnection::tryToConnectToTheNextAddress()
{
if (this->addressesToTry.isEmpty())
return;
QHostAddress address;
// Search for an IPv6 address first.
for (QMutableListIterator<QHostAddress> i(this->addressesToTry); i.hasNext();)
{
QHostAddress currentAddress = i.next();
if (currentAddress.protocol() == QAbstractSocket::IPv6Protocol)
{
address = currentAddress;
i.remove();
break;
}
}
if (address.isNull())
address = this->addressesToTry.takeFirst();
#ifndef DEBUG
// If the address is local check if the core is launched, if not try to launch it.
if (Global::isLocal(address))
this->coreStatus = CoreController::StartCore();
#endif
connect(this->socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(stateChanged(QAbstractSocket::SocketState)));
this->socket->connectToHost(address, this->connectionInfo.port);
}
示例8: connectToHost
/*!
Connects to the IP address and port specified by \a address and \a
port. If the connection is established, this function returns true
and the socket enters ConnectedState. Otherwise, false is
returned.
If false is returned, state() should be called to see if the
socket is in ConnectingState. If so, a delayed TCP connection is
taking place, and connectToHost() must be called again later to
determine if the connection was established successfully or
not. The second connection attempt must be made when the socket is
ready for writing. This state can be determined either by
connecting a QSocketNotifier to the socket descriptor returned by
socketDescriptor(), or by calling the blocking function
waitForWrite().
Example:
\snippet doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp 0
Otherwise, error() should be called to determine the cause of the
error.
*/
bool QNativeSocketEngine::connectToHost(const QHostAddress &address, quint16 port)
{
Q_D(QNativeSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::connectToHost(), false);
#if defined (QT_NO_IPV6)
if (address.protocol() == QAbstractSocket::IPv6Protocol) {
d->setError(QAbstractSocket::UnsupportedSocketOperationError,
QNativeSocketEnginePrivate::NoIpV6ErrorString);
return false;
}
#endif
if (!d->checkProxy(address))
return false;
Q_CHECK_STATES(QNativeSocketEngine::connectToHost(),
QAbstractSocket::UnconnectedState, QAbstractSocket::ConnectingState, false);
d->peerAddress = address;
d->peerPort = port;
bool connected = d->nativeConnect(address, port);
if (connected)
d->fetchConnectionParameters();
return connected;
}
示例9: showCurrentIP
void MainWindow::showCurrentIP()
{
int count = 0;
QString addrs = "";
QList<QHostAddress> ips = QNetworkInterface::allAddresses();
QListIterator<QHostAddress> i(ips);
while (i.hasNext())
{
QHostAddress addr = i.next();
if ((addr.protocol() == 0) && (addr.toString() != "127.0.0.1"))
{
count++;
addrs += addr.toString() + ", ";
}
}
if (count == 0)
QMessageBox::critical(0, "", "Currently you don't have any IP address assigned");
else {
addrs = addrs.left(addrs.length() - 2);
if (count == 1)
QMessageBox::information(0, "", "Your current IP address is " + addrs);
else
QMessageBox::information(0, "", "Your current IP addresses are " + addrs);
}
}
示例10: bindSocket
bool LimitedSocket::bindSocket(QAbstractSocket* sock, QHostAddress addr)
{
if(addr.isNull())
return true;
int error;
if(addr.protocol() == QAbstractSocket::IPv4Protocol)
{
sockaddr_in in;
memset(&in, 0, sizeof(in));
in.sin_addr.s_addr = addr.toIPv4Address();
in.sin_family = AF_INET;
error = ::bind(sock->socketDescriptor(), (sockaddr*) &in, sizeof(in));
}
else
{
sockaddr_in6 in6;
Q_IPV6ADDR a = addr.toIPv6Address();
memset(&in6, 0, sizeof(in6));
memcpy(in6.sin6_addr.s6_addr, a.c, 16);
in6.sin6_family = AF_INET6;
error = ::bind(sock->socketDescriptor(), (sockaddr*) &in6, sizeof(in6));
}
return !error;
}
示例11: listenReuse
int listenReuse(const QHostAddress &address, quint16 port, bool startListening)
{
QAbstractSocket::NetworkLayerProtocol proto = address.protocol();
int socket = createNewSocket(proto);
if (socket < 0) {
qCCritical(CWSGI_BALANCER) << "Failed to create new socket";
return -1;
}
int optval = 1;
if (::setsockopt(socket, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval))) {
qCCritical(CWSGI_BALANCER) << "Failed to set SO_REUSEPORT on socket" << socket;
return -1;
}
if (!nativeBind(socket, address, port)) {
qCCritical(CWSGI_BALANCER) << "Failed to bind to socket" << socket;
return -1;
}
if (startListening && ::listen(socket, 100) < 0) {
qCCritical(CWSGI_BALANCER) << "Failed to listen to socket" << socket;
return -1;
}
return socket;
}
示例12: SerializeSocksAddress
bool SocksConnection::SerializeSocksAddress(const QString &host,
quint16 port, QByteArray &socks_addr)
{
socks_addr.clear();
QDataStream stream(&socks_addr, QIODevice::WriteOnly);
QHostAddress addr;
if(addr.setAddress(host)) {
switch(addr.protocol()) {
case QAbstractSocket::IPv4Protocol:
stream << static_cast<quint8>(SocksAddress_IPv4);
stream << addr.toIPv4Address();
break;
case QAbstractSocket::IPv6Protocol:
stream << static_cast<quint8>(SocksAddress_IPv6);
stream.writeRawData(reinterpret_cast<const char *>
(addr.toIPv6Address().c), 16);
break;
default:
stream << static_cast<quint8>(SocksAddress_Illegal);
}
} else {
stream << static_cast<quint8>(SocksAddress_DomainName);
stream << static_cast<quint8>(host.size());
stream.writeRawData(host.toUtf8().constData(), host.size());
}
stream << port;
return true;
}
示例13: formatIP
QString Global::formatIP(const QHostAddress& address, quint16 port)
{
QString formatedIP;
if (address.protocol() == QAbstractSocket::IPv4Protocol)
formatedIP.append(address.toString());
else
formatedIP.append("[").append(address.toString()).append("]");
formatedIP.append(":").append(QString::number(port));
return formatedIP;
}
示例14: htonl
HostAddress::HostAddress(const QHostAddress &address) {
if (address.protocol() == QAbstractSocket::IPv6Protocol) {
const Q_IPV6ADDR &a = address.toIPv6Address();
memcpy(qip6.c, a.c, 16);
} else {
addr[0] = 0ULL;
shorts[4] = 0;
shorts[5] = 0xffff;
hash[3] = htonl(address.toIPv4Address());
}
}
示例15: contains
static bool contains(QNetworkAddressEntry host, QHostAddress addr)
{
#if !defined(QT_NO_IPV6)
if (addr.protocol() == QAbstractSocket::IPv6Protocol &&
addr.isInSubnet(kLinkLocal6) &&
host.ip().scopeId() != addr.scopeId())
{
return false;
}
#endif
return addr.isInSubnet(host.ip(), host.prefixLength());
}