| Detta exekverbara exempel illustrerar med en
enkel klient-server-tjänst
hur en socket
skapas i programspråket python. Vi tittar först på det
förbindelselösa transportprotokollet UDP och sedan på det
förbidelseorienterade transportprotokollet TCP.
Båda exemplen innehåller två protokollentiteter, en klient och en server. Om man vill köra båda entiteterna på samma maskin, kan man sätta serverName = 'localhost' på båda. Glöm inte att göra filerna exekverbara med kommandot "chmod +x udp*" UDPUDP Server
sa0bxi@learn:~ $ cat udpserver.py
#!/usr/bin/env python3
from socket import * #importerar python-modulen socket som hanterar all kommunikation
serverName = 'localhost' #kan vara ipv4-adress eller giltigt FQDN som finns i dns
serverPort=12000 #ledigt portnummer < 65536
serverSocket = socket(AF_INET, SOCK_DGRAM) #AF_INET betyder IPv4, SOCK_DGRAM betyder UDP
serverSocket.bind(('', serverPort)) #binder porten till 12000
print("The server is ready to receive")
while True: #En loop som omvandlar inkommande textsträngar till versaler
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(), clientAddress)
sa0bxi@learn:~ $
UDP Client
sa0bxi@bxigw:~ $ cat udpclient.py
#!/usr/bin/env python3
from socket import * #importerar python-modulen socket som hanterar all kommunikation
serverName = 'learn.sk0bu.amprnet.se' #kan bytas mot 'localhost' vid test med server och klient på samma dator
serverPort=12000 #Serverporten ovan
clientSocket = socket(AF_INET, SOCK_DGRAM) #AF_INET betyder IPv4, SOCK_DGRAM betyder UDP
while True: #En loop som skickar en teststräng till servern
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()
sa0bxi@bxigw:~ $
TCPTCP server
sa0bxi@learn:~ $ cat tcpserver.py
#!/usr/bin/env python3
from socket import * #importerar python-modulen socket som hanterar all kommunikation
#serverName = 'localhost' #kan vara ipv4-adress eller giltigt FQDN som finns i dns
serverPort=12001
serverSocket = socket(AF_INET, SOCK_STREAM) #AF_INET betyder IPv4, SOCK_STREAM betyder TCP
serverSocket.bind(('', serverPort)) #binder porten till numret 12001
serverSocket.listen(1) #anger maxantal köade anrop
print("The server is ready to receive")
while True:
connectionSocket, ClientAddress = serverSocket.accept()
message = connectionSocket.recv(2048).decode()
modifiedMessage = message.upper()
connectionSocket.send(modifiedMessage.encode())
connectionSocket.close()
TCP Client
#sa0bxi@learn:~ $ cat tcpclient.py
#!/usr/bin/env python3
from socket import * #importerar python-modulen socket som hanterar all kommunikation
serverName = 'localhost' #kan bytas mot 'localhost' vid test med server och klient på samma dator
serverPort=12001
while True:
clientSocket = socket(AF_INET, SOCK_STREAM) #AF_INET betyder IPv4, SOCK_STREAM betyder TCP
clientSocket.connect((serverName, serverPort))
message = input('Input lowercase sentence:')
clientSocket.send(message.encode())
modifiedMessage = clientSocket.recv(2048)
print(modifiedMessage.decode())
clientSocket.close()
#
sa0bxi@learn:~ $
|