Sunteți pe pagina 1din 12

Universidade Federal de Ouro Preto

Instituto de Cincias Exatas e Aplicadas


Curso de Engenharia Eltrica - Campus Joo Monlevade

Estrutura Bsica de uma Aplicao de Rede Utilizando o


Conceito de Socket

Thiago Vieira Tavares-10.2.8237

Relatrio, da Matria Redes de


Computadores 1, do curso de Engenharia
Eltrica da UFOP, como requisito para
complementar
o
aprendizado
na
disciplina.

Joo Monlevade
22/11/2014

ndice
1. Introduo.................................................................................................................... 3
2. Objetivo....................................................................................................................... 4
3. Materiais e Mtodos.................................................................................................... .5
4. Testes.......................................................................................................................... ..9
4. Concluso....................................................................................................................11
5. Referencias Bibliogrficas.......................................................................................... 12

1_Introduo
Geralmente a comunicao entre mquinas e algumas vezes em processos na
mesma mquina, feita atravs do uso de sockets. Em que, o socket o canal de
comunicao atravs da qual as aplicaes se comunicam. Existem trs tipos de sockets,
o datagram socket, que envia o pacote sem a confirmao de que o servidor recebeu.
Stream Sockets, envia o pacote com cuidado de que o servidor recebe e que a conexo
est mantida. Raw Sockets, envia o pacote sem utilizar as camadas de transporte, usada
de forma mais rstica na camada de rede (IP) e na Internet Control Message Protocol
(ICMP).
Muitas aplicaes de rede consistem em um par de programas, um programa
cliente e um programa servidor, que residem em dois sistemas finais diferentes. Quando
esses programas so executados, criam-se um processo cliente e um processo servidor,
que se comunica entre si lendo de seus sockets e escrevendo atravs deles [1].
Neste trabalho uma aplicao de uma rede local implementada, em que, um
processo cliente aciona o processo servidor enviando dois nmeros e um operador
aritmtico, o processo servidor tem a tarefa de resolver a operao e enviar para o
processo cliente a resposta.

2_Objetivo
O objetivo deste trabalho implementar uma comunicao entre dois processos,
um denominado cliente e o outro denominado servidor, estes processos esto situados em
sistemas diferentes, a comunicao entre ambos ser feita por meio do mecanismo socket.
O processo cliente deve transmitir dois valores, mais a operao, para o processo servidor
localizado no sistema remoto. O processo servidor receber os valores e a operao e
ento, realizar o clculo enviando a resposta para o processo cliente.

3_Materiais e Mtodos
A primeira deciso tomada foi a maneira em que a aplicao rodaria, TCP ou
UDP. Pelas caractersticas estudas para o modo de conexo TCP, em que, esse tipo de
canal promove uma transmisso confivel de cadeia de bytes, pelo qual fluem dados entre
dois sistemas finais. Assim, a conexo TCP garante que o processo servidor receber cada
byte na ordem que foram enviados. Ela garante uma conexo confivel entre os processos
cliente e servidor. Por isso a maneira escolhida para a transmisso de dados foi pela
conexo TCP. Essa aplicao utilizara socket para a comunicao entre o processo e o
TCP. A figura 1 mostra como essa comunicao funciona.

Figura 1-Processos que se comunicam atravs de sockets TCP.

O cliente inicia o contato com o servidor, por isso, o programa servidor no pode
estar inativo, ele deve estar rodando antes de o cliente tentar iniciar o contato. O cdigo
implementado para o processo cliente mostrado e comentado abaixo.
package TCP;
import java.io.*;
import java.net.*;
class TCPCliente {
public static void main(String argv[]) throws Exception
{
// Declarao das variveis
String num1,num2, op; // cadeia digitada pelo usurio
String resultado; // cadeia obtida do servidor
// Criando conexo
Socket clientSocket = new Socket("localhost", 6789);
// Cria a cadeia de sada conectada ao socket
DataOutputStream outToServer = new DataOutputStream(
clientSocket.getOutputStream());
// Criando cadeia de entrada conectada ao socket
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(
clientSocket.getInputStream()));
// Dados do teclado

System.out.println("Digite o primeiro numero: ");


BufferedReader inFromUser = new BufferedReader(
new InputStreamReader(System.in));
num1 = inFromUser.readLine();
System.out.println("Digite o segundo numero: ");
BufferedReader inFromUser2 = new BufferedReader(
new InputStreamReader(System.in));
num2 = inFromUser2.readLine();
System.out.println("Digite o operador: ");
BufferedReader inFromUser3 = new BufferedReader(
new InputStreamReader(System.in));
op = inFromUser3.readLine();
// Envia os caracteres para a rede
outToServer.writeBytes(num1 + '\n');
outToServer.writeBytes(num2 + '\n');
outToServer.writeBytes(op + '\n');
// A cadeia resultado recebe os caracteres do servidor
resultado = inFromServer.readLine();
// Mostra no monitor a resposta do servidor
System.out.println("FROM SERVER: " + resultado);
// Fecha o Socket e a conexo TCP
clientSocket.close();
}
}

O programa TCPCliente.java cria cinco cadeias e um socket. O socket


denominado clientsocket. A cadeias inFromUser, inFromUser2, inFromUser3 so as
cadeias padro para entrada de dados do usurio para o processo. A cadeia
inFromServer outra cadeia de entrada, ela tambm est ligada ao socket e recebe os
dados da rede. Por ltimo a cadeia outToServer ligada ao socket tem a funo de enviar
os caracteres a rede.
Em um primeiro instante os objetos num1, num2, op so instanciados, esses
objetos so as cadeias enviadas ao servidor. O objeto resultado a cadeia obtida do
servidor e mostrada na tela.
Socket clientSocket = new Socket("198.168.0.105", 6789);

Essa linha de comando cria o objeto clientSocket do tipo Socket. Ela tambm ativa a
conexo TCP entre cliente e servidor. Aps aceitar a conexo, o servidor redireciona o
cliente para outra porta dessa forma a porta 6789 fica liberada aguardando outra conexo.
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(New InputStreamReader(
clientSocket.getInputStream()));

Essas linhas criam objetos de cadeia que so ligados ao socket. A cadeia


outToServer fornece a sada do processo para o socket. A cadeia inFromServer fornece
ao processo a entrada do socket
BufferedReader inFromUser = new BufferedReader(new
InputStreamReader(System.in));
num1 = inFromUser.readLine();

Essa linha de comando permite a leitura dos nmeros e do operador do teclado.


outToServer.writeBytes(num1 + '\n');

Esse comendo responsvel por enviar a cadeia num1 para a rede, enviando,
assim, para o servidor.
6

resultado = inFromServer.readLine();
System.out.println("FROM SERVER: " + resultado);
clientSocket.close();

Os comandos acima so responsveis por receber a cadeia enviada pelo servidor,


mostrar o na tela essa cadeia e, por ltimo, fechar o socket e a conexo TCP.
O cdigo do programa TCPServidor.java mostrado a seguir.
package TCP;
import java.io.*;
import java.net.*;
class TCPServidor {
public static void main(String argv[]) throws Exception
{
// Declarao das Variveis
String num1, num2, op, result;
int a, b, resultado = 0;
char c;
// Criando o objeto welcomeSocket do tipo ServerSocket
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true){
// Aguardando Conexes
Socket connectionSocket = welcomeSocket.accept();// cria o
novo socket
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(
connectionSocket.getInputStream()));
DataOutputStream outToClient =
new DataOutputStream(
connectionSocket.getOutputStream());
// Recebe os dados dos clientes
num1 = inFromClient.readLine();
System.out.println("Dado recebido, " + num1);
num2 = inFromClient.readLine();
System.out.println("Dado recebido, " + num2);
op = inFromClient.readLine();
System.out.println("Dado recebido, " + op);
// Passa os dados para inteiro e para caractere
a = Integer.parseInt(num1);
b = Integer.parseInt(num2);
c = op.charAt(0);
switch(c){
case'+':
resultado
break;
case'-':
resultado
break;
case'*':
resultado
break;
case'/':
resultado
break;

= a + b;

= a - b;

= a * b;

= a / b;

}
result = Integer.toString(resultado);
System.out.println("resultado = " + result);
// Envia os dados para o cliente
outToClient.writeBytes(result + '\n');
}
}
}

TCPServidor possui muitas linhas de comando semelhantes com TCPCliente, por


isso essas linhas no sero comentadas novamente.
ServerSocket welcomeSocket = new ServerSocket(6789);

Essa linha cria o objeto welcomeSocket, que do tipo ServerSocket. Essa porta
fica esperando a conexo do cliente.
Socket connectionSocket = welcomeSocket.accept();

Essa linha cria um novo socket para a conexo entre o processo servidor e o
processo cliente, assim, outras conexes podem ser realizadas na porta 6789 entre o
servidor e outros clientes.
a = Integer.parseInt(num1);
b = Integer.parseInt(num2);
c = op.charAt(0);
switch(c){
case'+':
resultado
break;
case'-':
resultado
break;
case'*':
resultado
break;
case'/':
resultado
break;
}

= a + b;

= a - b;

= a * b;

= a / b;

Essa parte do cdigo responsvel por fazer a operao matemtica. Ela objetivo
principal desse trabalho.
result = Integer.toString(resultado);
outToClient.writeBytes(result + '\n');

Por fim, essa ultima parte do codigo responsvel por enviar o resultado para o
cliente.

4_ Testes
No primeiro teste uma operao de adio realizada entre os nmeros 15 e 7. O
resultado obtido e mostrado no promp de comando deve ser igual a 22. As figuras 2 e 3
mostram os processos cliente e servidor aps o fim do teste.

Figura 2-Processo Cliente em execuo.

Figura 3-Processo Servidor em execuo.

No segundo teste uma operao de diviso realizada entre os nmeros 45 e 15.


O resultado obtido e mostrado no promp de comando deve ser igual a 3. As figuras 4 e 5
mostram os processos cliente e servidor aps o fim do teste.

Figura 4-Processo Cliente em execuo.

Figura 5-Processo Servidor em execuo.

10

5_ Concluso
A principal dificuldade encontrada para a realizao do cdigo foi fazer a
operao matemtica no servidor, sendo que os dados recebidos do cliente eram do tipo
string e para realizar a operao foi preciso transforma-los no tipo inteiro.
Por fim, o cdigo teve o desempenho esperado mesmo sendo testado em vrios
usurios remotos diferentes.

11

6_ Referencias Bibliogrficas
[1]Kurose,Ross. REDES DE COMPUTADORES E A INTERNET: Uma Abordagem
Top-Down. 5.ed. Pearson, 2010.
[2]Theo Lins. Redes de Computadores. Joo Monlevade: Instituto de Cincias
Exatas e Aplicadas ICEA.

12

S-ar putea să vă placă și