• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dkid

[Java] Sockets

6 mensagens neste tópico

Boas Pessoal,

Ando iniciado no Java, e à bocado deu-me na cabeça saber como funciona os sockets, pois queria enviar mensagens de um computador para outro em LAN (ou seja, na mesma rede).

Meti as mãos na pesquisa e li em parte o artigo da SUN

http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html

Encontra-se a funcionar e consigo enviar mensagem do computador cliente para o Servidor!

Código do Cliente (socketcliente.java)

/**
* @author Dkid
* Baseado nos artigos
* http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html
* http://www.devarticles.com/c/a/Java/Socket-Programming-in-Java/
*/

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import java.io.*; // pacote de streams
import java.net.*; // pacote de sockets


class socketcliente extends JFrame implements ActionListener
{
JLabel text,clicked;
JButton botao;
JPanel painel;
JTextField campotexto;
Socket socket = null;
PrintWriter saida = null;
BufferedReader entrada = null;

socketcliente() //iniciamos o constructor
{
	text = new JLabel("Texto a enviar por socket:");
	campotexto= new JTextField(30);
	botao = new JButton("Enviar!");
	botao.addActionListener(this);

	painel = new JPanel();
	painel.setLayout(new BorderLayout());
	painel.setBackground(Color.white);
	getContentPane().add(painel);
	painel.add("North", text);
	painel.add("Center", campotexto);
	painel.add("South", botao);
}
@Override
public void actionPerformed(ActionEvent event)
{
	Object fonte = event.getSource();

	if (fonte == botao) //Envia informacao pelo socket
	{
		String text = campotexto.getText();
		saida.println(text);
		campotexto.setText(new String("")); //recebe do servidor

		try{
			String linha = entrada.readLine();
			System.out.println("Texto recebido: " + linha);
		}
		catch (IOException e)
		{
			System.out.println("Falha na leitura!");
			System.exit(1);
		}
	}
}

public void EscutaSocket() //cria ligacao de socket
{
	try
	{
		socket = new Socket("127.0.0.1", 85); //aqui decidimos qual o IP e a sua porta, neste caso 127.0.0.1:85
		saida = new PrintWriter(socket.getOutputStream(), true);
		entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	}
	catch(UnknownHostException e)
	{
		System.out.println("Host desconhecido: localhost");
		System.exit(1);
	}
	catch (IOException e)
	{
		System.out.println("Não Existe Entrada nem Saída de informação");
		System.exit(1);
	}
}

public static void main (String[] args)
{
	socketcliente frame = new socketcliente();
	frame.setTitle("Cliente");
	WindowListener ls = new WindowAdapter()
	{
		public void windowClosing(WindowEvent e)
		{
			System.exit(0);
		}
	};
	frame.addWindowListener(ls);
	frame.pack();
	frame.setVisible(true);
	frame.EscutaSocket();
}
}

Código do Servidor (SocketServer.java)

/**
* @author Dkid
* Baseado nos artigos
* http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html
* http://www.devarticles.com/c/a/Java/Socket-Programming-in-Java/
*/
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;

import java.io.*;
import java.net.*;

class SocketServer extends JFrame
	implements ActionListener {

  JButton botao;
  JLabel label = new JLabel("Texto Recebido:");
  JPanel painel;
  JTextArea campotexto = new JTextArea();
  ServerSocket servidor = null;
  Socket cliente = null;
  BufferedReader entrada = null;
  PrintWriter saida = null;
  String linha;

  SocketServer(){ //Constructor
    botao = new JButton("Receber!");
    botao.addActionListener(this);

    painel = new JPanel();
    painel.setLayout(new BorderLayout());
    painel.setBackground(Color.white);
    getContentPane().add(painel);
    painel.add("North", label);
    painel.add("Center", campotexto);
    painel.add("South", botao);

  }

 public void actionPerformed(ActionEvent event) {
    Object source = event.getSource();

    if(source == botao){
        campotexto.setText(linha);
    }
 }

 public void EscutaSocket(){

   try{
     servidor = new ServerSocket(85); //Definição da porta que vai ficar à escuta, neste caso : porta 85
   } catch (IOException e) {
     System.out.println("Não é possivel escutar na porta 85");
     System.exit(-1);
   }

   try{
     cliente = servidor.accept();
   } catch (IOException e) {
     System.out.println("Servidor não aceitou: 85"); //
     System.exit(-1);
   }

   try{
     entrada = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
     saida = new PrintWriter(cliente.getOutputStream(), true);
   } catch (IOException e) {
     System.out.println("Falha de permissão: 85");
     System.exit(-1);
   }

   while(true){
     try{
       linha = entrada.readLine();
//Send data back to cliente
       saida.println(linha);
     } catch (IOException e) {
       System.out.println("Falha de Leitura!");
       System.exit(-1);
     }
   }
 }

 protected void finalize(){
//Clean up
    try{
       entrada.close();
       saida.close();
       servidor.close();
   } catch (IOException e) {
       System.out.println("Não é possivel fechar!.");
       System.exit(-1);
   }
 }

 public static void main(String[] args){
       SocketServer frame = new SocketServer();
frame.setTitle("Servidor");
       WindowListener ls = new WindowAdapter() {
               public void windowClosing(WindowEvent e) {
                       System.exit(0);
               }
       };
       frame.addWindowListener(ls);
       frame.pack();
       frame.setVisible(true);
frame.EscutaSocket();
 }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o site onde colocou os ficheiros deixaram de funcar  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existe também um exemplo na wiki do P@P, se os ficheiros daqui não estiverem disponíveis, os da Wiki estão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora