Sie sind auf Seite 1von 34

EEE 13 LECTURE 7

UDP SOCKETS
"HEY, WANNA HEAR A UDP
JOKE? I DON’T CARE IF YOU
GET IT OR NOT!"
Internet Geeks
Building Blocks of a UDP Server
Building Blocks of a UDP Client
UDP SERVER

SETTING UP A UDP SERVER


IP
ADDRESS
TYPE

IPV6
IPV4

192.168.11.123 2001:CDBA:0000:0000:0000:0000:3257:9652
32 BITS 128 BITS

4 BILLION ADDRESSES 3.4 X 1038

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

SETTING UP A UDP SERVER

IP
ADDRESS
TYPE
192.168.11.123
or
2001:CDBA:0000:0000:0000:0000:3257:9652

MACHINE

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

SETTING UP A UDP SERVER

FB

SPOTIFY
IP
ADDRESS IP
TYPE ADDRESS
DOTA 2

VIRTUAL

BOX

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

SETTING UP A UDP SERVER


TCP

FB PORT
443

UDP

SPOTIFY PORT

IP 57621
ADDRESS IP PORT

TYPE ADDRESS UDP
 NUMBER
DOTA 2 PORT

27015
TCP

VIRTUAL
 PORT

BOX 8080
CREATE
 GIVE NETWORK
 SEND

CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

SETTING UP A UDP SERVER

IP
ADDRESS IP PORT
 TCP OR
TYPE ADDRESS NUMBER UDP?

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

SETTING UP A UDP SERVER

IP
ADDRESS IP PORT
 PACKET

TYPE ADDRESS NUMBER TYPE

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

WHAT IT LOOKS LIKE IN PSEUDOCODE


import socket


 IP
var HOST = "" //Use the Machine’s IP Address
 ADDRESS

var PORT = 6971
 PORT


 NUMBER
var IP_TYPE = socket.AF_INET


 IP
var P_TYPE = socket.SOCK_DGRAM ADDRESS
TYPE

PACKET

TYPE

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

CREATING A COMMUNICATION ENDPOINT

NETWORK
CARD

IP
SOCKET
 ADDRESS
FD TYPE

PACKET

TYPE

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

WHAT IT LOOKS LIKE IN CODE


s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

SOCKET

FD

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

BINDING YOUR NETWORK INFORMATION TO YOUR SOCKET

IP
ADDRESS
SOCKET

FD

PORT

NUMBER

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

WHAT IT LOOKS LIKE IN CODE


s.bind((HOST, PORT))
IP
ADDRESS

SOCKET

FD

PORT

NUMBER

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

READY TO COMMUNICATE

SEND
OTHER

SOCKET
 SOCKET

FD FD
RECV

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

WHAT THAT LOOKS LIKE IN CODE


while 1:
# receive data from client (data, addr)
d = s.recvfrom(1024)
data = d[0]
SEND
addr = d[1]
OTHER

SOCKET

if not data: SOCKET

FD
break FD
RECV
reply = 'OK...' + data

s.sendto(reply , addr)
print 'Message[' + addr[0] + ':' + str(addr[1]) + '] - ' + data.strip()

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

CLOSING THE CONNECTION

SOCKET

FD

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

WHAT THAT LOOKS LIKE IN CODE


s.close()

SOCKET

FD

CREATE
 GIVE NETWORK
 SEND



CLOSE

SETUP COMMUNICATION
 INFORMATION
 OR

ENDPOINT TO ENDPOINT RECEIVE CONNECTION
UDP SERVER

PUTTING IT ALL TOGETHER


import socket
import sys

HOST = '' # Symbolic name meaning all available interfaces


PORT = 8888 # Arbitrary non-privileged port

# Datagram (udp) socket


try :
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'Socket created'
except socket.error, msg :
print 'Failed to create socket. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()

# Bind socket to local host and port


try:
s.bind((HOST, PORT))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()

print 'Socket bind complete'

#now keep talking with the client


while 1:
# receive data from client (data, addr)
d = s.recvfrom(1024)
data = d[0]
addr = d[1]

if not data:
break

reply = 'OK...' + data

s.sendto(reply , addr)
print 'Message[' + addr[0] + ':' + str(addr[1]) + '] - ' + data.strip()
s.close()
UDP CLIENT

SETTING UP YOUR CLIENT


For the server…

IP
ADDRESS IP PORT
 PACKET

TYPE ADDRESS NUMBER TYPE

CREATE
 SEND

COMMUNICATION
 OR
 CLOSE

SETUP
ENDPOINT RECEIVE CONNECTION
UDP CLIENT

SETTING UP YOUR CLIENT


Instead…

IP SERVER’S
 SERVER’S

ADDRESS IP PORT
 PACKET

TYPE ADDRESS NUMBER TYPE

CREATE
 SEND

COMMUNICATION
 OR
 CLOSE

SETUP
ENDPOINT RECEIVE CONNECTION
UDP CLIENT

CREATING YOUR COMMUNICATION ENDPOINT

NETWORK
CARD

IP
SOCKET
 ADDRESS
FD TYPE

PACKET

TYPE

CREATE
 SEND

COMMUNICATION
 OR
 CLOSE

SETUP
ENDPOINT RECEIVE CONNECTION
UDP CLIENT

WHAT IT LOOKS LIKE IN CODE


s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

SOCKET

FD

CREATE
 SEND

COMMUNICATION
 OR
 CLOSE

SETUP
ENDPOINT RECEIVE CONNECTION
UDP CLIENT

READY TO SEND AND RECEIVE! NO BIND REQUIRED!


while(1) :
msg = raw_input('Enter message to send : ')
try :
#Set the whole string
SEND
s.sendto(msg, (host, port))
OTHER

SOCKET

# receive data from client (data, addr) SOCKET

FD
d = s.recvfrom(1024) FD
reply = d[0] RECV
addr = d[1]
print 'Server reply : ' + reply
except socket.error, msg:
print 'Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()

CREATE
 SEND

COMMUNICATION
 OR
 CLOSE

SETUP
ENDPOINT RECEIVE CONNECTION
UDP CLIENT

CLOSING YOUR CLIENT


s.close()

SOCKET

FD

CREATE
 SEND

COMMUNICATION
 OR
 CLOSE

SETUP
ENDPOINT RECEIVE CONNECTION
UDP CLIENT

PUTTING IT ALL TOGETHER


import socket #for sockets
import sys #for exit

# create dgram udp socket


try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error:
print 'Failed to create socket'
sys.exit()

host = 'localhost';
port = 8888;

while(1) :
msg = raw_input('Enter message to send : ')

try :
#Set the whole string
s.sendto(msg, (host, port))

# receive data from client (data, addr)


d = s.recvfrom(1024)
reply = d[0]
addr = d[1]
print 'Server reply : ' + reply

except socket.error, msg:


print 'Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
UDP CLIENT

DEMO: SERVER AND CLIENT CODE

SEE

DEMO
QUESTIONS?
SEE YOU
THURSDAY :D

Das könnte Ihnen auch gefallen