Sieci komputerowe — ćwiczenia 5


Temat zajęć: Programowanie sieci w Pythonie.

Literatura:

Zadanie 0

Wykonaj program z zadania domowego ćwiczeń 4 (parametry: ip=150.254.79.243 port=4444 TCP — server jest dostępny wyłącznie w czasie zajęć).

Uwaga:
Poniższe przykłady dla Pythona 2.x


Przykład 1

Przykładowe programy serwera i klienta TCP (zaczerpnięte z tutoriala).

Plik server.py pobierz
#!/usr/bin/python

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection


Plik client.py pobierz
#!/usr/bin/python

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close                     # Close the socket when done

Zadanie 1

Sprawdź składnię metod klasy Socket w Pythonie. Znajdź różnice i podobieństwa względem interface'u gniazd BSD w języku C.

Zadanie 2

Napisać podobny prosty „komunikator” wykorzystujący protokół UDP.

Przykład 2

Prosty „klient” HTTP (zapytanie GET):

Plik httpGET.py pobierz
import httplib
conn = httplib.HTTPConnection("marcing.faculty.wmi.amu.edu.pl")
conn.request("GET", "/DSIKLI0/index.html")
r1 = conn.getresponse()
print r1.status, r1.reason, r1.read()
data1 = r1.read()
conn.request("GET", "/index2.html")
r2 = conn.getresponse()
print r2.status, r2.reason
data2 = r2.read()
conn.close()

Przykład 3

Zapytanie HTTP HEAD (może przydać się w części dotyczącej analizy sieci):

Plik httpHEAD.py pobierz
import httplib
conn = httplib.HTTPConnection("marcing.faculty.wmi.amu.edu.pl")
conn.request("HEAD","/DSIKLI0/index.html")
res = conn.getresponse()
print res.status, res.reason
data = res.read()
print len(data)
data == ''

Przykład 4

Zapytanie HTTP POST (może przydać się w części dotyczącej analizy sieci):

Plik httpPOST.py pobierz
import httplib, urllib
params = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("bugs.python.org")
conn.request("POST", "", params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
'Redirecting to http://bugs.python.org/issue12524'
conn.close()

Zadanie 3

Napisz klienta SMTP lub POP3 wykorzystując odpowiednie moduły Pythona.

Zadanie 4

Jak napisać server HTTP w Pythonie?
Powtórka działu