The Raspberry Pi is a series of credit card–sized single-board computers developed in the UK by the Raspberry Pi Foundation with the intention of promoting the teaching of basic computer science in schools.
The original Raspberry Pi and Raspberry Pi 2 are manufactured in several board configurations through licensed manufacturing agreements with Newark element14 (Premier Farnell), RS Components and Egoman. These companies sell the Raspberry Pi online. Egoman produces a version for distribution solely in China and Taiwan, which can be distinguished from other Pis by their red colouring and lack of FCC/CE marks. The hardware is the same across all manufacturers.
The original Raspberry Pi is based on the Broadcom BCM2835 system on a chip (SoC), which includes an ARM1176JZF-S 700 MHz processor, VideoCore IV GPU, and was originally shipped with 256 megabytes of RAM, later upgraded (models B and B+) to 512 MB. The system has Secure Digital (SD) (models A and B) or MicroSD (models A+ and B+) sockets for boot media and persistent storage.
3. www.techvilla.org.in
Socket Programming
Table of Contents
1. Network Application Programming
Interface: Sockets and Internet Sockets
2. Network Programming Tips
3. Client-Server Architecture
4. Example: Client Programming
5. Example: Server Programming
6. Network Programmer’s Mistakes
3
4. www.techvilla.org.in
Layers of the IP Protocol Suite 4
Link Layer
Transport Layer
Network Layer
Application Layer
Link Layer
Transport Layer
Network Layer
Application Layer
Ethernet
e.g. ftp
e.g. TCP, UDP
e.g. IP
5. www.techvilla.org.in
Protocol Suite Location
Internet Protocol Layer
5
Link Layer
Transport Layer (TCP, UDP)
Network Layer (IP)
Application Layer
Network Card &
Device Driver
(e.g. Ethernet card)
Operating System
(e.g. Unix)
Applications
(e.g. browser, game, ftp)
Application Programming
Interface (API)
(e.g. network API)
Interface to the Network Card
Location
6. www.techvilla.org.in
Network API
Operating system provides Application
Programming Interface (API) for network application
API is defined by a set of function types, data
structures, and constants
Desirable characteristics of the network interface
Simple to use
Flexible
independent from any application
allows program to use all functionality of the network
Standardized
allows programmer to learn once, write anywhere
Application Programming Interface for networks is
called socket
6
7. www.techvilla.org.in
Sockets
Sockets provide mechanisms to communicate
between computers across a network
There are different kind of sockets
DARPA Internet addresses (Internet Sockets)
Unix interprocess communication (Unix Sockets)
CCITT X.25 addresses
and many others
Berkeley sockets is the most popular Internet Socket
runs on Linux, FreeBSD, OS X, Windows
fed by the popularity of TCP/IP
7
8. www.techvilla.org.in
Internet Sockets
Support stream and datagram packets (e.g. TCP,
UDP, IP)
Is Similar to UNIX file I/O API (provides a file
descriptor)
Based on C, single thread model
does not require multiple threads
8
9. www.techvilla.org.in
Types of Internet Sockets
Different types of sockets implement different
communication types (stream vs. datagram)
Type of socket: stream socket
connection-oriented
two way communication
reliable (error free), in order delivery
can use the Transmission Control Protocol (TCP)
e.g. telnet, ssh, http
Type of socket: datagram socket
connectionless, does not maintain an open
connection, each packet is independent
can use the User Datagram Protocol (UDP)
9
11. www.techvilla.org.in
Byte Ordering of Integers
Different CPU architectures have different
byte ordering
11
D3
high-order byte low-order byte
memory
address A
memory
address A +1
Stored at little-endian computer
Stored at big-endian computer low-order byte high-order byte
F2Integer representation (2 byte)
12. www.techvilla.org.in
Byte Ordering Problem
Question: What would happen if two
computers with different integer byte ordering
communicate?
12
Message in Memory of
of big-endian Computer
Message is sent
across Network 48 45 4C 4C 6F 01 00
Message is:
[Hello,1]
Message is: [Hello,256]
48 45 4C 4C 6F 01 00
Message in Memory of
little-endian Computer
Answer:
Nothing if they do not exchange integers!
But: If they exchange integers, they would get the
wrong order of bytes, therefore, the wrong value!
Example:
13. www.techvilla.org.in
Byte Ordering Solution
There are two solutions if computers with different byte
ordering system want to communicate
They must know the kind of architecture of the sending
computer
(bad solution, it has not been implemented)
Introduction of a network byte order. The functions are:
uint16_t htons(uint16_t host16bitvalue)
uint32_t htonl(uint32_t host32bitvalue)
uint16_t ntohs(uint16_t net16bitvalue)
uint32_t ntohs(uint32_t net32bitvalue)
Note: use for all integers (short and long), which
are sent across the network
Including port numbers and IP addresses
13
15. www.techvilla.org.in
Naming and Addressing
Host name
identifies a single host (see Domain Name System
slides)
variable length string (e.g. www.berkeley.edu)
is mapped to one or more IP addresses
IP Address
written as dotted octets (e.g. 10.0.0.1)
32 bits. Not a number! But often needs to be
converted to a 32-bit to use.
Port number
identifies a process on a host
16 bit number
15
17. www.techvilla.org.in
Simple Client-Server Example 17
Client Server
request
response
socket()
connect()
send()
recv()
close()
socket()
bind()
listen()
accept()
recv()
send()
recv()
close()
Connection
establishment
Data response
Data request
End-of-file notification
18. www.techvilla.org.in
Example: Client Programming
Create stream socket (socket() )
Connect to server (connect() )
While still connected:
send message to server (send() )
receive (recv() ) data from server and process it
Close TCP connection and Socket (close())
18
19. www.techvilla.org.in
socket(): Initializing Socket
Getting the file descriptor
int chat_sock;
if ((chat_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket");
printf("Failed to create socketn");
abort ();
}
1.parameter specifies protocol/address family
2.parameter specifies the socket type
Other possibilities: SOCK_DGRAM
3.parameter specifies the protocol.
0 means protocol is chosen by the OS.
19
20. www.techvilla.org.in
IP Address Data Structure
struct sockaddr_in {
short int sin_family; // Address family
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8];
};
struct in_addr {
unsigned long s_addr; // 4 bytes
};
Padding of sin_zeros: struct sockaddr_in has same size as struct
sockaddr
20
21. www.techvilla.org.in
connect(): Making TCP Connection
to Serverstruct sockaddr_in sin;
struct hostent *host = gethostbyname (argv[1]);
unsigned int server_address = *(unsigned long *) host->h_addr_list[0];
unsigned short server_port = atoi (argv[2]);
memset (&sin, 0, sizeof (sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = server_address;
sin.sin_port = htons (server_port);
if (connect(chat_sock, (struct sockaddr *) &sin, sizeof (sin)) < 0) {
perror("connect");
printf("Cannot connect to servern");
abort();
}
21
22. www.techvilla.org.in
send(): Sending Packets
int send_packets(char *buffer, int buffer_len) {
sent_bytes = send(chat_sock, buffer, buffer_len, 0);
if (send_bytes < 0) {
perror (“send");
}
return 0;
}
Needs socket descriptor,
Buffer containing the message, and
Length of the message
Can also use write()
22
23. www.techvilla.org.in
Receiving Packets:
Separating Data in a Stream
Use records (data structures) to partition the data
stream
23
B
Fixed length
record
Fixed length
record
0 1 3
C
2 94 6 87
D
5
A
receive
buffer
slide through
24. www.techvilla.org.in
Receiving Packets
int receive_packets(char *buffer, int buffer_len, int *bytes_read)
{
int left = buffer_len - *bytes_read;
received = recv(chat_sock, buffer + *bytes_read, left, 0);
if (received < 0) {
perror (“recv");
}
if (received <= 0) {
return close_connection();
}
*bytes_read += received;
while (*bytes_read > RECORD_LEN) {
process_packet(buffer, RECORD_LEN);
*bytes_read -= RECORD_LEN;
memmove(buffer, buffer + RECORD_LEN, *bytes_read);
}
return 0;
}
24
Can also use read()
buffer
*bytes_read
buffer_len
25. www.techvilla.org.in
Server Programming: Simple
Create stream socket (socket() )
Bind port to socket (bind() )
Listen for new client (listen() )
While
accept user connection and create a new socket (accept()
)
data arrives from client (recv() )
data has to be send to client (send() )
25
26. www.techvilla.org.in
bind(): Assign IP and Port
struct sockaddr_in sin;
struct hostent *host = gethostbyname (argv[1]);
unsigned int server_address = *(unsigned long *) host->h_addr_list[0];
unsigned short server_port = atoi (argv[2]);
memset (&sin, 0, sizeof (sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = server_address;
sin.sin_port = htons (server_port);
if (bind(chat_sock, (struct sockaddr *) &sin, sizeof (sin)) < 0) {
perror("bind");
printf("Cannot bind server application to networkn");
abort();
26
27. www.techvilla.org.in
bind():
bind() tells the OS to assign a local IP address and local port
number to the socket.
Many applications let the OS choose an IP address.
Use wildcard INADDR_ANY as local address in this case.
At server, user process must call bind() to assign a port
At client, bind() is not required since OS may assign available port
and IP address
The server will get the port number of the client
through the UDP/TCP packet header
Note: Each application is represented by a server port number
27
28. www.techvilla.org.in
listen(): Wait for Connections
int listen(int sockfd, int backlog);
Puts socket in a listening state, willing to
handle incoming TCP connection request.
Backlog: number of TCP connections that
can be queued at the socket.
28