APS 4/5 Semestre Ciencia da Computação UNIP
Por: kamys17 • 27/2/2018 • 2.008 Palavras (9 Páginas) • 2.213 Visualizações
...
O que são sockets de Berkeley?
Os "sockets" de Berkeley são uma API genérica para programação sobre protocolos de comunicação. A implementação das system-calls desta interface é "standard" em todos os sistemas operativos UNIX e estende-se também a muitas outras plataformas. No final deste documento pode encontrar algumas notas sobre portabilidade para Visual C++ / Sockets Windows.
Dentro do possível é mantida a semântica associada aos descritores de ficheiros (io.h), os descritores são números inteiros usados para facultar o acesso ao controlo das comunicações embebido no núcleo e são aqui conhecidos por "sockets".
De um modo geral, quando ocorre um erro as "system-call" devolvem o valor -1, as aplicações devem verificar sempre a ocorrência de erros, para simplificar o código dos exemplos aqui apresentados este aspecto é muitas vezes omitido.
Como esta API foi concebida para suportar diversos protocolos terá de suportar diversos formatos de dados, tais como os endereços.
PLANO DE DESENVOLVIMENTO DO JOGO
Buscamos de uma forma simples, programar um mensageiro para a comunicação das equipes de inspetores que estarão se revezando dentro das indústrias para passar informações e o controle dos processos, com isso terão que passar informações online para a secretaria. E isso será possível através da nossa ferramenta.
Para a execução da seguinte ferramenta é necessário informar o IP de outro computador, e neste outro o IP do seu, a porta deve ser a mesma.
Feito isso, o “mensageiro” funciona da seguinte forma: duas pessoas trocam mensagens simultaneamente.
LINHAS DE CÓDIGO
Na primeira lista temos a declaração dos pacotes usados na classe servidor.java. Onde usamos “streams”, “collections” e classes para a construção de formulários.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
Onde a seguir temos a declaração da classe servidor.java. Repare que ela extends Thread, que é um tipo de Thread, adotando todos os comportamentos e propriedades desta classe
public class Servidor extends Thread {
Na segunda lista temos a declaração dos atributos estáticos e de instâncias da classe servidor.java. O atributo “clientes” é utilizado para armazenar o BufferedWriter de cada cliente conectado e o server socket é utilizado para a criar o servidor, que teoricamente deve ser feita apenas uma vez.
private static ArrayListclientes;
private static ServerSocket server;
private String nome;
private Socket con;
private InputStream in;
private InputStreamReader inr;
private BufferedReader bfr;
Na terceira lista temos a declaração do método construtor, que recebe um objeto socket como parâmetro e cria um objeto do tipo BufferedReader, que aponta para o stream do cliente socket.
/**
* Método construtor
* @param com do tipo Socket
*/
public Servidor(Socket con){
this.con = con;
try {
in = con.getInputStream();
inr = new InputStreamReader(in);
bfr = new BufferedReader(inr);
} catch (IOException e) {
e.printStackTrace();
}
}
A quarta lista mostra a declaração do método “run”: toda vez que um cliente novo chega ao servidor, esse método é acionado e alocado numa Thread e também fica verificando se há alguma mensagem nova. Caso tenha, esta será lida e o evento “sentToAll” será acionado para enviar a mensagem para os demais usuários conectados no chat.
/**
* Método run
*/
public void run(){
try{
String msg;
OutputStream ou = this.con.getOutputStream();
Writer ouw = new OutputStreamWriter(ou);
BufferedWriter bfw = new BufferedWriter(ouw);
clientes.add(bfw);
nome = msg = bfr.readLine();
while(!"Sair".equalsIgnoreCase(msg) && msg != null)
{
msg = bfr.readLine();
sendToAll(bfw, msg);
System.out.println(msg);
}
}catch (Exception e) {
e.printStackTrace();
...