Как правильно указать порты для datagramSocket в Java Mac OS X - PullRequest
0 голосов
/ 19 марта 2012

У меня следующая проблема.

Я пытаюсь реализовать систему P2P, используя протокол UDP для передачи и получения файлов.Моя главная проблема связана с коммуникациями.Когда я пытаюсь установить механизм приема однорангового узла, он вызывает следующее исключение:

java.net.BindException: Address already in use

Хотя я исследовал порты, которые использовал, с помощью этой команды (в Mac OS X):

sudo lsof -Pn | grep "insert port number here"

И я понял, что все используемые мной порты абсолютно свободны.

Вот мой ошибочный код:

Создание сервера:

   while(!serverReady){
            this.appOutputObj.serverInitializationFailed();
            boolean correctData = this.requestingData();

            //ERROR: In this if condition!
            if(correctData){
            serverReady = this.appEngine.initializeEngineServer();

            System.out.println(serverReady);

            if(serverReady)
                break;
            }
        }


    public boolean initializeServer(){


        try {

            this.residentServer = new Server(5001, 5002, this.mcAddress, this.dataPort, this.controlPort);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
   }

public Server(int dataPort, int controlPort, InetAddress newMcAddress, int mcDataPort, int mcControlPort) throws SocketException{
    this.dataPort = dataPort;
    this.controlPort = controlPort;

    this.dataDatagramSocket = new DatagramSocket(this.dataPort);            //<-- Line with exception raising.
    this.controlDatagramSocket = new DatagramSocket(this.controlPort);

    this.mcAddress = newMcAddress;
    this.mcDataPort = mcDataPort;

    this.dataMST = new MulticastServerThread(this.dataPort, this.mcAddress, this.mcDataPort);
    this.controlMST = new MulticastServerThread(this.controlPort, this.mcAddress, this.mcControlPort);

    this.dataMST.start();
    this.controlMST.start();
    }

Есть какое-нибудь решение для этого?

...