Redes de Computadores Programao com Sockets em Java











![Receção de um Datagram. Packet byte[] buffer = new byte[MAXMSG]; Datagram. Packet reply = Receção de um Datagram. Packet byte[] buffer = new byte[MAXMSG]; Datagram. Packet reply =](https://slidetodoc.com/presentation_image_h2/1f99a895f56556adbc3748554327925c/image-12.jpg)




- Slides: 16
Redes de Computadores Programação com Sockets em Java José Legatheaux Martins Departamento de Informática da FCT/UNL 1
Objetivos • YYYYYYYY – XXXXXXX 2
Interface de transporte de dados • Os processos enviam e recebem mensagens através da interface de Sockets, uma API do sistema de operação • Um socket permite a comunicação extremo a extremo 3
API Sockets (Application Programming Interface) • Fornece primitivas para criar sockets, enviar e receber mensagens processadas e formatadas pelas aplicações • Exemplo: Java Socket API – Class Socket – Métodos: socket(), send(), write(), receive(), read(), close(), . . . • O sistema de operação disponibiliza assim um serviço de comunicação generalizada implementado sobre o serviço de rede IP 4
Transportes e suas características • TCP • Orientado conexão (exige conexão prévia) • Transporte fiável • UDP • Muito simples de usar • Serviço para datagramas sem conexão (não exige conexão prévia) • Tem as mesmas garantias de banda, latência, controlo de fluxo ou saturação que o nível IP (“melhor esforço”)
Comunicação com Sockets UDP Datagrama UDP Porta: Px Porta: Pz Socket UDP: IPk, Px Programa cliente Endreço IP: IPk Socket UDP: IPy, Pz Programa servidor Endreço IP: IPy 6
Class Inet. Address myself = Inet. Address. get. By. Name("localhost"); Inet. Address myself = Inet. Address. get. By. Name("127. 0. 0. 1"); Inet. Address myself = Inet. Address. get. Local. Host(); Inet. Address server = Inet. Address. get. By. Name("www. wikipedia. org"); Inet. Address server = Inet. Address. get. By. Name("200. 10. 78. 9"); Inet. Address [ ] servers = Inet. Address. get. All. By. Name("google. com"); 7
Sockets UDP Porta: Py Programa cliente Fila in Fila out Socket UDP: IPx, Py Endreço IP: IPx 8
Class Datagram. Socket client. Socket = new Datagram. Socket(); Datagram. Socket server. Socket = new Datagram. Socket(PORT); Cliente socket = new Datagram. Socket(); request = new Datagram. Packet(buffer, . . . server, PORT); socket. send(request); Servidor request socket = new Datagram. Socket(PORT); request = new Datagram. Packet(buffer, . . . ); socket. receive(request); reply = process. Request(request); reply socket. send(reply) socket. receive(reply) Tempo 9
Formato dos datagramas UDP 32 bits Outros campos do cabeçalho IP Origin IP address (32 bits) Cabeçalho IP (20 bytes sem opções) Destination IP address (32 bits) Source port (16 bits) Datagrama length (16 bits) Destination port (16 bits) Checksum UDP (16 bits) Application data (Payload) Payload do datagrama UDP Cabeçalho UDP (8 bytes) Dados ou payload (64 K - 28 bytes) 10
Class Datagram. Packet Scanner in = new Scanner( System. in ); System. out. printf("Type a message: "); String msg = in. next. Line(); byte[] msg. Data = msg. get. Bytes(); Datagram. Packet request = new Datagram. Packet(msg. Data, msg. Data. length, server, port); socket. send(request); 11
Receção de um Datagram. Packet byte[] buffer = new byte[MAXMSG]; Datagram. Packet reply = new Datagram. Packet(buffer, buffer. length); socket. receive(reply); 12
Exemplo Completo “UDP Echo Client” import java. net. *; import java. util. *; public class UDPEcho. Client { private static final int MAXMSG = 255; private static final int PORT = 8000; public static void main(String[] args) throws Exception { if (args. length != 1) { System. err. println("usage: java UDPEcho. Client servidor"); System. exit(0); } Inet. Address server. Address = Inet. Address. get. By. Name(args[0]); Datagram. Socket socket = new Datagram. Socket(); Scanner in = new Scanner(System. in); 13
Continuação for (; ; ) { // loop for ever System. out. printf("Type a message: "); String msg = in. next. Line(); byte[] msg. Data = msg. get. Bytes(); Datagram. Packet request = new Datagram. Packet(msg. Data, msg. Data. length, server. Address, PORT); socket. send(request); byte[] buffer = new byte[MAXMSG]; Datagram. Packet reply = new Datagram. Packet(buffer, MAXMSG); socket. receive(reply); String answer = new String(reply. get. Data(), 0, reply. get. Length()); System. out. printf("The answer is: "%s"n", answer); } // never reached, leaves by exception // socket. close(); } } 14
Porta: Py Programa cliente receive buffer send buffer Canal TCP Socket stream: IPx, Py Endreço IP: IPx 15
Conclusões • YYYYYYYY – XXXXXXX 16