Qt Fundamentals: Networking - Aalborg...

8

Transcript of Qt Fundamentals: Networking - Aalborg...

Page 1: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

1

Qt Fundamentals: Networking

4

Mobile Device Networking

� Many available network interfaceso WLAN (802.11b/g)o Bluetootho Infraredo Cellular (GPRS, UMTS, HSDPA, etc.)o USBo etc.

� Depending on the technology, several layers are already specified. I.e. Bluetooth specify everything up until the transport layer.

mobile = wireless?

5

Networking Applications on Mobile devices

When developing networking application for mobile devices there are a number of considerations that need to be taken into account e.g.:� Which technologies are available / what to use?

o Power consumption (battery capacity)o Speed / throughputo Rangeo Topology

Power consumption is becoming an important feature and selling point for new applications. 6

802.11 basics

� 802.11bo 2.4 GHz ISM-band o Up to 11 Mbps

� All use CSMA/CA for

multiple access � All have infrastructure

mode and ad hoc network version.

� 802.11go 2.4 GHz ISM-band o Up to 54 Mbps

� 802.11ao 5 GHzo Up to 54 Mbps

Page 2: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

7

802.11 basics

8

802.11 basics Ad hoc

Infrastructure

� No routing, but multi-hop possible

� Distributed beacon� Direct

communiction

� Connected to Distribution System (DS) usually the Internet

� Packets first go to the

AP and then to the nodes

9

802.11 basics

� It is important to note that how data rates are selected is implementation

specific. o According to the

802.11 spec. implementers are free to decide what speed to use.

source: www.bb-elec.com/bb-elec/literature/tech/wireless_basics.pdf

� Practice show very varying results. Especially for broadcast.

11

Infrared

No Qt API currently exist to use Infrared on devices.

IR data transmission is also employed in short-range communication among computer peripherals and personal

digital assistants. These devices usually conform to standards published by IrDA, the Infrared Data Association.

� IR does not penetrate walls and so does not interfere with other devices in adjoining rooms.

� Point-to-point (quite sensitive) � Infrared is the most common way for remote controls to

command appliances.

12

CellularSource: http://en.wikipedia.org/wiki/Comparison_of_wireless_data_standards

� Large number of cellular networks available.

� Type will depend on users subscription.

Page 3: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

13

USB

Not a wireless standard, but that brings a number of advantages on its own� Reliable data transfer� Fast data-rates � Charge while connected

Usually communication occurs over a serial-port emulation. E.g. on Linux using the usbserial module

14

NFC

� NFC is an extremely short-range (approx. 1 centimeter) wireless

techonology and has a maximum transfer rate of 424 kbit/s.

� NFC is ideal for transfer small packets of data when two devices are touched together.

16

IP (Internet Protocol)

The Internet Protocol (IP) is a protocol used for communicating data across a packet-switched internetwork using the Internet Protocol Suite, also referred to as TCP/IP.

Two version exist:� IPv4 � IPv6

Most significant change between IPv4 and IPv6 is the change from 32-bit addresses to

128-bit - i.e. from 4 billion available addresses to 340 undecillion.

17

Getting an IP Address (IPv4)

Every host and router on the Internet has an IP address.

However, due to the limited amount of IPv4 addresses these are normally not global, but assigned using one of the following mechanisms:� Dynamic Host Configuration Protocol (DHCP) allows a

computer to be configured automatically, eliminating the need for intervention by a network administrator.

� Local Link Address is a method by which a host may

automatically configure an interface with an IPv4 address in the 169.254/16 prefix.

� Static IP denotes that a host has manually been assigned the IP address to use.

18

Types

� Unicast: one process talking to another process � Multicast: addressing an group of receivers� Broadcast: addressing all receivers on a specific network

1.Subnet-directed broadcast for the subnet 192.168.42/24,

then 192.168.42.255 would be the subnet-directed broadcast

� Limited broadcast 255.255.255.255 - datagrams sent to this address must never be forwarded.

Page 4: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

20

Socket Interface

� Originated in BSD Unix � One of the most widely-supported internet programming

interfaces today� A socket is an application-to-application channel

o UDP and TCP protocols accepted � A unique end-point is specified using the {ip address, port}

tuple. Qt provides a C++ object oriented API over the standard BSD socket interface.

21

UDP uses a simple transmission model without:� hand-shaking � reliability� ordering

UDP's stateless nature is also useful for servers that answer small queries from huge numbers of clients. Unlike TCP, UDP is compatible with packet broadcast (sending to all on local network) and multicasting (send to all subscribers).

UDP (User Datagram Protocol)

Datagram oriented

22

UDP (User Datagram Protocol)

Qt provides access to the UDP protocol through the QUdpSocket class.

Sender (minimum requirements)

Receiver (minimum requirements)

udpSocket = new QUdpSocket(this);

udpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45454);

udpSocket = new QUdpSocket(this);udpSocket->bind(45454, QUdpSocket::ShareAddress);

connect(udpSocket, SIGNAL(readyRead()),

this, SLOT(processPendingDatagrams()));

Operations:� read� write� bind

23

Practical Issue: Fragmentation

� Fragmentation and broadcasto Avoid it by limiting the packet size

o Typical Maximum Transfer Unit (MTU) 1500 bytes (from Ethernet)

o Remember to account for headers in lower layers e.g.

UPD 8 bytes + IP 20 bytes + 802.11 MAC header X bytes

fe = frame error probability

ps = packet success

n = number of fragmentsps = (1-fe)

n

24

TCP (Transport Control Protocol)

For many types of applications the unreliable data deliver semantics provided by UDP is insufficient. For these applications TCP provides a connection-oriented communication.

� Reliable using retransmissions� Flow control / Congestion control � Ordered data transfer� Data integrity guarantee using checksum. � Client-server oriented protocol � Stream oriented

Page 5: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

25

TCP (Transport Control Protocol)

Qt provides access to the TCP protocol through the QTcpSocket and QTcpServer classes

26

TCP (Transport Control Protocol)

A TCP server Example:

� The TCP server consist of a QTcpServer that listens to port 55555o Generates a newConnection() signal

Server::Server(QObject parent = 0) : QObject(parent)

{ m_tcpServer = new QTcpServer(this);

connect(m_tcpServer, SIGNAL(newConnection()),

this, SLOT(newConnection()));

m_tcpServer->listen(QHostAddress::Any, 55555);

}

27

TCP (Transport Control Protocol)

A TCP server Example:

� The next connection is retrieved using nextPendingConnection()

void Server::newConnection()

{ QTcpSocket *connection = m_tcpServer->nextPendingConnection(); connect(connection, SIGNAL(disconnected()), connection, SLOT(deleteLater()));

QByteArray buffer; QDataStream out(&buffer, QIODevice::WriteOnly);

out.setVersion(QDataStream::Qt_4_6);

QString greeting = QString("Hello! The time is %1").arg(QTime::currentTime().toString());

out << (quint16)0; out << greeting; out.device()->seek(0);

out << (quint16)(buffer.size() - sizeof(quint16));

connection->write(buffer);

connection->disconnectFromHost();}

28

TCP (Transport Control Protocol)

A TCP client Example:

� Use a QTcpSocket to connect to the hosto readyRead() is necessary, but there are more signals

that are interested, e.g. error

Client::Client(QObject *parent = 0) : QObject(parent){

m_tcpSocket = new QTcpSocket(this);

connect(m_tcpSocket, SIGNAL(readyRead()),

this, SLOT(readyToRead()));

m_tcpSocket->connectToHost(QHostAddress::LocalHost, 55555);

}

29

TCP (Transport Control Protocol)

A TCP client Example:� Use a QTcpSocket to connect to the host

o readyRead() is necessary, but there are more signals that are interested, e.g. error

void Client::readyToRead(){ QDataStream in(m_tcpSocket);

in.setVersion(QDataStream::Qt_4_6);

if(m_tcpBlockSize == 0) {

if(m_tcpSocket->bytesAvailable()<sizeof(quint16)) return; in >> m_tcpBlockSize;

}

if(m_tcpSocket->bytesAvailable() < m_tcpBlockSize)

return;

QString greeting;

in >> greeting; doSomething(greeting); m_tcpBlockSize = 0;

}

30

TCP (Transport Control Protocol)

� The protocol demonstrated is very basico Reply to all connections, then close

� A real world protocol would probablyo Keep the connection open and use a set of commands for

requesting and manipulating datao Carry some sort of versioning information etc.

Page 6: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

31

Encrypted Sockets

� TCP/IP traffic is easy to overhear� QSslSocket provides encrypted TCP sockets

o Use connectToHostEncryptedo When receiving the encrypted() signal the connection is

encrypted.

� SSL, Secure Sockets Layer, is a layer on top of TCP

33

QIODevice

QIODevice is the base for all I/O devices used in Qt� A typical I/O devices supports reading and writing blocks of

data� QIODevice provides an abstract interface to allow device

independent I/O features.

Using the QIODevice:� Make sure the device is open (e.g. use isOpen()) using the open() function. Remeber to use the correct OpenMode (ReadWrite, ReadOnly, ...)

� Write to the device using write() or putChar()� Read from the device using read(), readLine(), or readAll()

� Call close() when finished 34

QIODevice

Reading from a QIODevice� QIODevice emits readyRead() when new data is

available for reading, e.g. when data is read from the network or microphone.

� The bytesAvailable() function can be used to check the number of bytes ready to be read.

Writing to a QIODevice � After writing to a QIODevice the bytesWritten() signal

is emitted.

Note, that concrete implementations of QIODevice may provide their own signals and slots (providing redundant functionality).

35

QDataStream

The QDataStream class provides serialization of data to a QIODevice� Using QDataStream we can serialize data in a platform

independent manner.o Byte-order etc.

QFile file("file.dat");file.open(QIODevice::WriteOnly);

QDataStream out(&file); // we will serialize the data into the fileout << QString("the answer is"); // serialize a stringout << (qint32)42; // serialize an integer

QFile file("file.dat");

file.open(QIODevice::ReadOnly);QDataStream in(&file); // read the data serialized from the fileQString str;qint32 a;

in >> str >> a; // extract "the answer is" and 42

Write

Read

36

QDataStream

Sending my custom types over the

network

struct DataHeader{

bool m_raw QString m_filename;

bool isRaw() const { return m_raw; }

void setRaw(bool isRaw)

{ m_raw = isRaw; }

const QString& filename() const

{ return m_filename; }

void setFilename(const QString &filename)

{ m_filename = filename; }

QByteArray toByteArray();

};

/** * Data stream operators for serializing / deserializing a packet */

inline QDataStream& operator<<(QDataStream &stream, const DataHeader &packet){ stream << packet.m_raw;

stream << packet.m_filename;

return stream;

}

inline QDataStream& operator>>(QDataStream &stream, DataHeader &packet)

{ stream >> packet.m_raw; stream >> packet.m_filename;

return stream;}

QByteArray b;

QDataStream outStream(&b, QIODevice::WriteOnly);

DataHeader outHeader;

outHeader.setRaw(true);outHeader.setFilename("woops.txt");outStream << outHeader;

QDataStream inStream(b); // Opens in ReadOnly

DataHeader inHeader;inStream >> inHeader; // Data now read into inHeader

Page 7: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

37

Endianness (byte order)

All the examples refer to the storage in memory of the value 0A0B0C0Dh.

� Big-endian (MSB)

� Little-endian (LSB)

Network byte order

39

Application Layer Protocols

� QNetworkAccessManager provides an interface for sending HTTP requests and receiving responseso QtWebKit provides support for rendering HTML in your

applications. � QFtp implements client side FTP

There are many other protocols

built on top of TCP/IP, e.g. BitTorrent, SMTP, POP, IMAP, SSH, TELNET, TFTP, etc.

Replaces QHttp

40

Example: Downloader

class Download : public QObject{ Q_OBJECTpublic:

Download() { connect(&manager, SIGNAL(finished(QNetworkReply*)),

this, SLOT(finished(QNetworkReply*))); }

void download(const QUrl &url) { manager.get(QNetworkRequest(url));

} private slots:

void finished(QNetworkReply *reply) { reply->deleteLater();

emit done(reply->url(), reply->readAll()); } signals:

void done(const QUrl &url, const QByteArray &data); private:

QNetworkAccessManager manager;};

Possible improvements:� Handle error conditions� Handle authentication

challenges� Handle SSL � Use application supplied

QNetworkAccessManager

42

Service Discovery

� An essential part of building a Local Area Networking (LAN) application

� Bluetooth uses the Bluetooth Service Discovery Protocol

(SDP) part of all Bluetooth implementations.o In practice can be quite slow.

� For IP-based networks several solutions exist:

o Simple Service Discovery Protocol (SSDP) used in UPnP

o DNS Service Discovery (DNS-SD) used in Zeroconf (also know as Avahi and Bonjour)

o + many many more

Page 8: Qt Fundamentals: Networking - Aalborg Universitetmobiledevices.kom.aau.dk/fileadmin/mobiledevices/teaching/summer... · Qt Fundamentals: Networking 4 ... oUSB oetc. • Depending

43

Service Discovery

� From a usability point of view service discovery should be a part of any application. o E.g. asking a user to enter the IP address of his/her

network enabled printer is unacceptable. � Goal: all services on a network should be discoverable and

easily accessed.� Challenges: keeping the protocol simple and efficient while

still supporting future services.