1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sockets em Java

Discussão em 'Programação' iniciada por fonte, 22 de Abril de 2008. (Respostas: 6; Visualizações: 1216)

  1. fonte

    fonte Power Member

    Pessoal sou algo po iniciante em sockets e tou com um problema que a meu ver até era simples. O que tou a tentar fazer para já é apenas enviar uma string 10 vezes a partir de um cliente, e do lado do servidor incrementar uma variavel que irá até 10 vezes de acordo com a recepçao da string. Aqui tá o código do cliente e do servidor:


    Cliente:

    Código:
    public static void main(String[] args) throws Exception{
        
            DatagramSocket clientSocket;
                    
            try {
                clientSocket = new DatagramSocket() ;
    
                InetAddress IPAddress = InetAddress.getLocalHost(); 
                byte[] sendData = new byte[1024]; 
     
                String sentence = "ComComp";       
            
                sendData = sentence.getBytes();         
    
                DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress, 9876);
            
                for(int i=0;i<10;i++) clientSocket.send(sendPacket);
                clientSocket.close(); 
            }
            
            catch(SocketException e){throw new SocketException (e.getMessage()); }
            catch(IOException e){throw new IOException (e.getMessage()); }
        }

    Servidor:

    Código:
    public class Main {
        
        
        public static void main(String[] args) throws Exception {
        
            int i, datagramas=0;
            DatagramSocket serverSocket;
            
            try {
                serverSocket = new DatagramSocket(9876);
                byte[] receiveData = new byte[1024]; 
                while(true) {
                    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
                    serverSocket.receive(receivePacket); 
                    
                    String sentence = new String(receivePacket.getData(),0,receivePacket.getLength()); 
                    datagramas++;    
                } 
              
            }
            
            catch(SocketException e){throw new SocketException (e.getMessage()); }
            catch(IOException e){throw new IOException (e.getMessage());}
        }
    }
    Quando corro isto dá o seguinte erro:
    Exception in thread "main" java.net.SocketException: Address already in use: Cannot bind
    at projectoservidor.Main.main(Main.java:42)
    Java Result: 1


    Se alguem me conseguir ajudar agradeço.
     
    Última edição pelo moderador: 23 de Abril de 2008
  2. MadOnion

    MadOnion Folding Member

    Tens mesmo que usar o protocolo UDP? Supondo que conheces os pros e cons do UDP, porque não usas o TCP? Sempre é mais facil começares. E quem sabe até adicionares as Threads, para que ele seja capaz de lidar com vários utilizadores em simultâneo.
    Relativamente aos problemas, não tens o servidor a correr algures no pc?
    Caso tenhas algum router, abriste um porto UDP para esse porto?
    Experimenta reiniciar o pc, e voltar a correr os dois programas.

    De resto, não consigo identificar problema algum no código.
     
  3. fonte

    fonte Power Member

    ja consegui mas tenho de mudar a porta sempre que corro os programas. Tem de ser mesmo udp pois é o objectivo do trabalhar para o qual este codigo vai servir.
     
  4. AliFromCairo

    AliFromCairo Power Member

    Podes usar um ficheiro de resources para configurar o port.
     
  5. MadOnion

    MadOnion Folding Member

    No pedaço do Servidor, não estás a fazer close() ao socket, será disso?
     
  6. sLiNk

    sLiNk Power Member

    Sim. E no cliente também convém fechar.
     
    Última edição: 23 de Abril de 2008

Partilhar esta Página