Mais Invormação sobre socket basta entrar nesta página. |
Arquivo: chatserver.java |
import java.awt.*; import java.net.*; import java.io.*; import java.util.*; public class chatserver extends Thread { int DEFAULT_PORT=4321; protected int port; protected ServerSocket server_port; protected ThreadGroup CurrentConnections; protected Vector connections; protected ServerWriter writer; private Calendar datatual; //Criar um ServerSocket public chatserver() { super("Server"); this.port=DEFAULT_PORT; try { server_port=new ServerSocket(port); } catch (IOException e) { System.err.println(e+"Exception"); } //Cria um threadgroup para as conexoes CurrentConnections=new ThreadGroup("Server Connections"); //Mensagem inicial na janela do servidor System.out.println("=== Conexoes Realizadas ==="); //Um vetor para armazenar as conexoes connections=new Vector(); writer=new ServerWriter(this); //Inicia o servidor para ouvindo as conexoes this.start(); } public void run() { try { while(true) { datatual = Calendar.getInstance(); Socket cliente_socket=server_port.accept(); //Exibe na janela do servidor os clientes que conectam (mostra o host //do cliente, a porta e a data e hora da conexao System.out.println("Host:"+cliente_socket.getInetAddress()+"| Porta:"+ cliente_socket.getPort()+"| "+datatual.getTime()); Connection c=new Connection(cliente_socket,CurrentConnections,3,writer); //evita o acesso simultaneo synchronized(connections) { //adiciona esta nova conexao a lista connections.addElement(c); } } } catch(IOException e) { System.err.println(e+"Exception"); } } //Inicia o servidor public static void main(String[] args) { new chatserver(); } } //---------------------------------------------------------------------------- class Connection extends Thread { static int numberOfConnections=0; protected Socket client; protected DataInputStream in; protected PrintStream out; protected ServerWriter writer; public Connection(Socket cliente_socket, ThreadGroup CurrentConnections, int priority, ServerWriter writer) { super(CurrentConnections,"Connection number"+numberOfConnections++); //define a prioridade this.setPriority(priority); client=cliente_socket; this.writer=writer; try { //Atarraxa os streams aos streams de entrada e saida do socket do //cliente e adiciona este outputstream ao vetor que contem todos //os streams de saida, usados pelo escritor writer in=new DataInputStream(client.getInputStream()); out=new PrintStream(client.getOutputStream()); writer.OutputStreams.addElement(out); } catch(IOException e) { try { client.close(); } catch (IOException e2) { System.err.println("Exception while getting socket streams:"+e); return; } } //dispara Thread this.start(); } //O metodo run faz um laco lendo as mensagens recebidas public void run() { String inline; //Envia uma mensagem de boas vindas ao cliente out.println("Bem vindo ao MiniChat..."); try { while(true) { //le uma linha de mensagem inline=in.readLine(); //A conexao eh interrompida se null if (inline==null) break; //Joga a linha no escritor writer writer.setOutdata(inline); synchronized(writer) { //chama o escritor synchronized() para evitar que duas linhas //Connection o chamem ao mesmo tempo. Esta e uma forma de "bloqueio". writer.notify(); } } } catch(IOException e) {} finally { try { client.close(); } catch(IOException e2) {} } } } //---------------------------------------------------------------------------- class ServerWriter extends Thread { protected chatserver server; public Vector OutputStreams; public String outdata; private String outputline; public ServerWriter(chatserver s) { super(s.CurrentConnections,"Server Writer"); server=s; OutputStreams=new Vector(); this.start(); } public void setOutdata(String mensagem) { outdata=mensagem; } public synchronized void run() { while(true) { //A linha faz um laco para sempre, mas na vedade so e executada quando //a condicao wait for reinicializada por um notify. Isso num bloco //sincronizado para bloquear a linha e evitar o acesso multiplo. try { this.wait(); } catch (InterruptedException e) { System.out.println("Caught an Interrupted Exception"); } outputline=outdata; synchronized(server.connections) { for (int i=0 ; i<OutputStreams.size() ; i++) { //Eh impressa a mensagem em cada um OutputStreams. PrintStream out; out=(PrintStream)OutputStreams.elementAt(i); out.println(outputline); } } } } } |
Arquivo: clientechat.java |
import java.io. * ; import java.net. * ; import java.awt. * ; import java.awt.event. * ; import javax.swing. * ; import java.awt.event. * ; public class clientechat extends JFrame { public static final int DEFAULT_PORT = 4321; public Socket clisoc; private Thread reader; public JTextArea OutputArea; public JTextField InputArea, nomefield; public PrintStream out; public String Name; //Cria as linhas de leitura e escrita e as inicia. public clientechat() { super("Cliente Chato"); this.setSize(320, 460); this.setLocation(50, 100); this.setResizable(false); Container ct = this.getContentPane(); ct.setLayout(null); JLabel xlabel_01 = new JLabel("MiniChat usando conexao (Socket TCP)"); xlabel_01.setBounds(10, 0, 300, 20); ct.add(xlabel_01); JLabel xlabel_02 = new JLabel("Nome do usuario"); xlabel_02.setBounds(10, 20 + 1, 150, 20); ct.add(xlabel_02); nomefield = new JTextField(""); nomefield.setBounds(10, 20 * 2 + 1, 150, 20); ct.add(nomefield); OutputArea = new JTextArea(""); OutputArea.setBounds(10, 20 * 3 + 10, 300, 300); ct.add(OutputArea); JLabel xlabel_03 = new JLabel("Digite uma mensagem e pressione ENTER"); xlabel_03.setBounds(10, 20 * 4 + 1 + 300, 300, 20); ct.add(xlabel_03); InputArea = new JTextField(""); InputArea.setBounds(10, 20 * 5 + 1 + 300, 300, 20); ct.add(InputArea); Image Icone = Toolkit.getDefaultToolkit().getImage("icon.gif"); setIconImage(Icone); this.setVisible(true); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); InputArea.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent tecla) { int c = tecla.getKeyCode(); if (c == KeyEvent.VK_ENTER) //Vigia se o usuario pressiona a tecla ENTER. //Isso permite saber a mensagem esta pronta para ser enviada! { String InLine = InputArea.getText(); Name = nomefield.getText(); out.println(Name + ">" + InLine); InputArea.setText(""); //Envia a mensagem, mas adiciona o nome do usuario a ela para que os //outros clientes saibam quem a enviou. } } }); try { //Cria um socket cliente passando o endereco e a porta do servidor clisoc = new Socket("127.0.0.1", DEFAULT_PORT); reader = new Reader(this, OutputArea); out = new PrintStream(clisoc.getOutputStream()); //Define prioridades desiguais para que o console seja compartilhado //de forma efetiva. reader.setPriority(3); reader.start(); } catch (IOException e) { System.err.println(e); } } public static void main(String[] args) { new clientechat(); } } //---------------------------------------------------------------------------- //A classe Reader le a entrada do soquete e atualiza a OutputArea com as //novas mensagens. class Reader extends Thread { protected clientechat cliente; private JTextArea OutputArea; public Reader(clientechat c, JTextArea OutputArea) { super("chatclient Reader"); this.cliente = c; this.OutputArea = OutputArea; } public void run() { DataInputStream in = null; String line; try { in = new DataInputStream(cliente.clisoc.getInputStream()); while (true) { line = in .readLine(); //Adiciona a nova mensagem a OutputArea OutputArea.append(line + "\r\n"); } } catch (IOException e) { System.out.println("Reader:" + e); } } } |
Arquivo: ServidorDatagrama.java |
import java.io.*; import java.net.*; public class ServidorDatagrama { public static void main(String[] args) { DatagramSocket socket=null; DatagramPacket recvPacket, sendPacket; try { System.out.println("=== Servidor de eco no ar !!! ==="); socket=new DatagramSocket(4545); while(socket!=null) { recvPacket=new DatagramPacket(new byte[512], 512); socket.receive(recvPacket); sendPacket=new DatagramPacket(recvPacket.getData(), recvPacket.getLength(), recvPacket.getAddress(), recvPacket.getPort()); socket.send(sendPacket); System.out.println("Mensagem recebida do Cliente: "+recvPacket.getAddress()+ ":"+recvPacket.getPort()); System.out.print("=> "); System.out.write(recvPacket.getData(),0,recvPacket.getLength()); System.out.print("\r\n"); System.out.print("\r\n"); } } catch(SocketException se) { System.out.println("Erro no ServidorDatagrama: "+se); } catch(IOException ioe) { System.out.println("Erro no ServidorDatagrama: "+ioe); } } } |
Arquivo: ClienteDatagrama.java |
import java.io.*; import java.net.*; public class ClienteDatagrama { private DatagramSocket socket=null; private DatagramPacket recvPacket, sendPacket; public static void main(String[] args) { DatagramSocket socket=null; DatagramPacket recvPacket, sendPacket; try { socket=new DatagramSocket(); InetAddress hostAddress=InetAddress.getByName("127.0.0.1"); DataInputStream userData=new DataInputStream(System.in); while (socket !=null) { //leitura da mensagem para enviar para o servidor Datagrama System.out.print("Mensagem para enviar: "); String userString=userData.readLine(); if ((userString==null)||(userString.equals(""))) return; //converte o String para um Array de bytes byte sendbuf[]=new byte[userString.length()]; userString.getBytes(0,userString.length(),sendbuf,0); sendPacket=new DatagramPacket(sendbuf, sendbuf.length, hostAddress, 4545); //envia o Datagrama para o servidor socket.send(sendPacket); //recebe o Datagrama do servidor recvPacket=new DatagramPacket(new byte[512], 512); socket.receive(recvPacket); //exibe na tela do cliente a mensagem de eco do servidor Datagrama System.out.print("Mensagem recebida (eco): "); System.out.write(recvPacket.getData(),0,recvPacket.getLength()); System.out.print("\r\n"); System.out.print("\r\n"); } } catch(SocketException se) { System.out.println("Erro no ClienteDatagrama: "+se); } catch(IOException ioe) { System.out.println("Erro no ClienteDatagrama: "+ioe); } } } |
Somente criptografar
Arquivo: JavaCript.java |
/* |
![]() |
Criptografar e Descriptografar
Este código abaixo é só um exemplo, um resumo, você pode criar um código criptográfico a partir deste modelo:
Obs:
Arquivo: crypt.java |
public class crypt { |
![]() |