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

Neo4

Java e UDP

8 mensagens neste tópico

Boas, estou a tentar criar um programa simples em java em que um cliente envia por UDP uma mensagem ao servidor e ele responde, o problema é que não estou a conseguir  :)

se colocar o cliente ou o servidor a correr o outro não corre da o seguinte erro:

Exception in thread "main" java.net.BindException: Address already in use: Cannot bind

        at java.net.PlainDatagramSocketImpl.bind0(Native Method)

        at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:82)

        at java.net.DatagramSocket.bind(DatagramSocket.java:368)

        at java.net.DatagramSocket.<init>(DatagramSocket.java:210)

        at java.net.DatagramSocket.<init>(DatagramSocket.java:261)

        at java.net.DatagramSocket.<init>(DatagramSocket.java:234)

        at udpserver.Servidor.main(Servidor.java:20)

Java Result: 1

codigo servidor:

~package udpserver;
import java.net.*;
import java.io.*;
/**
*
* @author neo4
*/
public class Servidor {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception{
        String message;
        byte [] sendData = new byte [1024];
        byte[] receiveData = new byte[1024];
        
        int porta = 1111;
        
        DatagramSocket socket = new DatagramSocket(porta);

            while(true){
                DatagramPacket pacoteRecebido = new DatagramPacket(receiveData, receiveData.length);

                socket.receive(pacoteRecebido);

                String mensagemrecebida = new String(pacoteRecebido.getData());

                System.out.println(mensagemrecebida);

                InetAddress IPAddress = pacoteRecebido.getAddress();

                int port = pacoteRecebido.getPort();
                
            }

    }

}

código cliente:

package udpclient;

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

/**
*
* @author neo4
*/
public class Cliente {
    public static void main(String[] args) throws Exception {
        byte [] sendData = new byte [1024];
        byte[] receiveData = new byte[1024];
        int porta = 1111;

        String localhost = "127.0.0.1";
        InetAddress IPAddress = InetAddress.getByName(localhost);

        String mensagemAenviar = "eu cliente falo para ti";

        sendData= mensagemAenviar.getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, porta);

        DatagramSocket clientSocket = new DatagramSocket();

        clientSocket.send(sendPacket);

         clientSocket.close();
            
        
    }
}

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes ter os 2 a trabalhar na mesma maquina e na mesma porta! Dai o erro que te dá.

Basta mudares a porta de um dos dois e deve funcionar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas se o servidor cria um socket na porta 1001 como é que recebe o do cliente que envia pela porta 1000 por exemplo? não há esse problema?

se mudar a porta correm os 2 ao mesmo tempo mas nao acontece nada ou seja o servidor nao recebe o texto do cliente

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nem comento o problema que me fez perder 2h...

no netbeans tinha que correr isoladamente cada um (1º server e dp cliente) e nao compilar e correr o projecto... lol

e a porta tem que ser a mesma :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tem de ser a mesma ?? Hummm pá eu por acaso UDP em Java acho que só mexi uma vez mas tinha ideia que eram diferente :S enfim lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim tem, tu crias um socket que fica À "escuta" nessa porta e outro que envia para essa porta, atenção que são sockets UDP ou seja não há conexão estabelecida previamente... nos TCP já é outra conversa :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois eu usei UDP uma vez em C já á bastante tempo em Java ainda nunca usei, tenho sempre usado TCP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As portas TCP e UDP são gamas diferentes. Podes usar a TCP 10000 e a UDP 10000 q não é a mesma.

Para o caso basta usar uma porta TCP e uma UDP, desde que não estejam ocupadas claro.

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