Relatório - Redes
Por: Ednelso245 • 10/4/2018 • 2.660 Palavras (11 Páginas) • 334 Visualizações
...
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("Do servidor:" + modifiedSentence);
clientSocket.close();
}
}
}
3.7 Modificações: bloquear resposta do servidor a um usuário indesejado
Para que o servidor não receba pacotes de um ou mais clientes específicos, é possível alterar o programa para que isso não aconteça, através do IP. A aplicação Java foi alterada para que isso fosse possível, com o exemplo de IP “/172.17.13.249”.
if (!"/172.17.13.249".equals(IPSTRING)){
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
Nesse trecho do programa, o servidor verifica se o IP do Cliente é o indesejado, e se for, ele não toma responde.
4. Transmission Control Protocol (TCP)
4.1 Execuções do cliente e servidor
Da mesma forma que foi criado aplicações Java para o software UDP, o mesmo foi feito para o TCP. Nesse caso, o Servidor estabelece uma conexão com o Cliente para que a mensagem possa ser transmitida. Após isso, a mensagem é transmitida para o servidor que excuta a aplicação e retorna a mensagem de resposta. Por fim, a conexão é fechada. O servidor TCP também entra em Loop permanente para que possa receber varias requisições.
Com o cliente o processo é parecido: há uma tentativa de conexão com o servidor com a especificação da porta e do IP do servidor. Após a conexão ser estabelecia, a mensagem pode ser enviada. Em seguida o socket aguarda a resposta do servidor e escreve a mensagem de resposta.
4.2 Execuções do cliente antes do servidor
Caso o cliente seja executado antes do servidor, ocorre um erro que não acontecia no UDP, em função da necessidade de se estabelecer uma conexão para o a mensagem ser enviada.
4.3 Execuções com portas distintas
Ao executar o cliente e o servidor com portas distintas, não é possível estabelecer conexão, então como no item anterior, diferentemente do UDP, ocorre um erro na execução.
4.4 Testes de comunicação entre máquinas diferentes
Assim, como no UDP, para estabelecer conexão com outras máquinas, bastou que os usuários envolvidos conhecessem o IP da máquina de destino e alterasse no programa. Os testes ocorreram como na própria máquina e não houve congestionamento de dados ao enviar várias mensagens de máquinas diferentes ao mesmo tempo.
4.5 Principais diferenças cliente e servidor UDP e TCP
As principais diferenças entre o os dois protocolos é que o UDP utiliza datagramas para enviar a mensagem, que é mais simples que os pacotes TCP e que o UDP não necessita de uma conexão para enviar a mensagem.
4.6 Modificações: o servidor atuando como uma calculadora
Neste caso, bastou programar as quatro operações básicas no servidor e estabelecer uma ordem para os caracteres enviados pelo cliente. O servidor entenderá a mensagem como um vetor de 3 dimensões separadas por “:”, então o cliente deverá inserir os valores da seguinte maneira: 1ºalgrismo:2ºalgarismo:operação(+,-,* ou /). Abaixo segue estrutura do novo servidor:
package tcpsocket;
import java.io.*;
import java.net.*;
class TCPServerSoma {
public static void main (String args[]) throws Exception {
ServerSocket serverSocket = new ServerSocket(8200);
String operacao[] = new String[3];
float num[] = new float[2];
String input = "null";
String resultado = null;
while (true)
{
System.out.println("Esperando conexão na porta 9000");
Socket s = serverSocket.accept();
System.out.println("Conexão estabelecida de " + s.getInetAddress());
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
input = br.readLine() + ":";
operacao = input.split(":");
num[0] = Float.parseFloat(operacao[0]);
num[1] = Float.parseFloat(operacao[1]);
if ("+".equals(operacao[2])){
...