Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação em redes Programação com sockets UDP e TCP Introdução • Os exemplos de programação de aplicações cliente/servidor (UDP e TCP) que aqui são apresentados baseiam-se nos descritos, de forma mais pormenorizada, no livro “Computer Networking – A Top-Down Approach, 7th Edition, Kurose…”, mais especificamente, na: • Secção 2.7 “Socket Programming: Creating Network Applications”, pág. 185 a 197. • As aplicações foram programadas em Python. Application Layer 2-3 Programação de Sockets objetivo: aprender a desenvolver aplicações cliente/servidor que se comunicam através de sockets socket: portas entre processos-aplicação e o protocolo de transporte extremo-a-extremo (end-to-end) Internet controlled by OS controlled by app developer transport application physical link network process transport application physical link network process socket Application Layer 2-4 Programação de Sockets Dois tipos de sockets para os dois tipos de protocolo de transporte: • UDP: entrega não fiável de datagramas (unreliable datagram) • TCP: fiável, orientado ao fluxo de bytes (reliable,byte stream- oriented ) Exemplo de Aplicação: 1. O cliente lê uma linha de caracteres (dados) de seu teclado e envia os dados para o servidor. 2. O servidor recebe os dados e converte-os caracteres maiúsculos. 3. O servidor envia os dados modificados para o cliente. 4. O cliente recebe os dados modificados e exibe-os no seu écran. Application Layer 2-5 Programação de sockets com UDP UDP: não há ligação entre cliente e servidor • não existe “handshaking” antes do envio de dados • O emissor coloca diretamente o IP de destino e o nº do porto a cada pacote a ser enviado • O receptor a partir do pacote recebido, extrai o endereço IP do emissor e o nº do porto de envio UDP: os dados transmitidos podem ser extraviados e/ou recebidos fora de ordem Do ponto de vista da aplicação : • UDP disponibiliza transferência não fiável de grupos de bytes (“datagrams”) entre cliente e servidor Interação entre sockets do cliente e servidor: UDP close clientSocket read datagram from clientSocket create socket: clientSocket = socket(AF_INET,SOCK_DGRAM) Create datagram with server IP and port=x; send datagram via clientSocket create socket, port= x: serverSocket = socket(AF_INET,SOCK_DGRAM) read datagram from serverSocket write reply to serverSocket specifying client address, port number Application 2-6 server (running on serverIP) client Application Layer 2-7 Exemplo de aplicação: cliente UDP from socket import * serverName = ‘hostname’ serverPort = 12000 clientSocket = socket(socket.AF_INET, socket.SOCK_DGRAM) message = raw_input(’Input lowercase sentence:’) clientSocket.sendto(message,(serverName, serverPort)) modifiedMessage, serverAddress = clientSocket.recvfrom(2048) print modifiedMessage clientSocket.close() Python UDPClient include Python’s socket library create UDP socket for server get user keyboard input Attach server name, port to message; send into socket print out received string and close socket read reply characters from socket into string Application Layer 2-9 Exemplo de aplicação: servidor UDP from socket import * serverPort = 12000 serverSocket = socket(AF_INET, SOCK_DGRAM) serverSocket.bind(('', serverPort)) print “The server is ready to receive” while 1: message, clientAddress = serverSocket.recvfrom(2048) modifiedMessage = message.upper() serverSocket.sendto(modifiedMessage, clientAddress) Python UDPServer create UDP socket bind socket to local port number 12000 loop forever Read from UDP socket into message, getting client’s address (client IP and port) send upper case string back to this client Application Layer 2-11 Programação de sockets com TCP Cliente deve contatar o servidor: • O processo servidor já deve estar a correr • O servidor deve já deve ter criado o socket (porto) para dar as boas-vindas ao cliente O cliente contata o servidor: • Criando um socket TCP e especificando o endereço IP e o nº do porto do processo servidor • Quando o cliente cria o socket: O cliente TCP estabelece ligação com o servidor TCP • Quando contatado pelo cliente, o server TCP cria um novo socket para o processo servidor comunicar com esse mesmo cliente em particular: • Permitindo a interação do servidor com múltiplos clientes O TCP disponibiliza uma transferência fiável e ordenada de um fluxo de bytes (“pipe”) entre o cliente e o servidor Do ponto de vista da aplicação: Application Layer 2-12 Client/server socket interaction: TCP wait for incoming connection request connectionSocket = serverSocket.accept() create socket, port=x, for incoming request: serverSocket = socket() create socket, connect to hostid, port=x clientSocket = socket() server (running on hostid) client send request using clientSocketread request from connectionSocket write reply to connectionSocket TCP connection setup close connectionSocket read reply from clientSocket close clientSocket Application Layer 2-13 Example app: TCP client from socket import * serverName = ’servername’ serverPort = 12000 clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((serverName,serverPort)) sentence = raw_input(‘Input lowercase sentence:’) clientSocket.send(sentence) modifiedSentence = clientSocket.recv(1024) print ‘From Server:’, modifiedSentence clientSocket.close() Python TCPClient create TCP socket for server, remote port 12000 No need to attach server name, port Application Layer 2-15 Example app: TCP server from socket import * serverPort = 12000 serverSocket = socket(AF_INET,SOCK_STREAM) serverSocket.bind((‘’,serverPort)) serverSocket.listen(1) print ‘The server is ready to receive’ while 1: connectionSocket, addr = serverSocket.accept() sentence = connectionSocket.recv(1024) capitalizedSentence = sentence.upper() connectionSocket.send(capitalizedSentence) connectionSocket.close() Python TCPServer create TCP welcoming socket server begins listening for incoming TCP requests loop forever server waits on accept() for incoming requests, new socket created on return read bytes from socket (but not address as in UDP) close connection to this client (but not welcoming socket)
Compartilhar