Попытка заставить работать программу java-сокета, но получение "java.net.BindException: Адрес уже используется - PullRequest
0 голосов
/ 04 марта 2012

Вот код

Я написал сервер и клиент.Но когда я запускаю их (как вы можете видеть в последней программе), я получаю следующую ошибку:

Whoop s! java.net.BindException: Address already in use 6666 6666 - это номер порта.я указал.

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

public class processSendHelper
{
    Process p;
    String address;
    int port;
    long msg_data;

    processSendHelper(int pid, int current_round, long address, long msg_data, int port)
    {
        try
        {
            ServerSocket sSoc = new ServerSocket(port);

                Socket inSoc = sSoc.accept();
                msg_Thread msgT = new msg_Thread(inSoc, msg_data);
                msgT.start();
                Thread.sleep(5000);
                sSoc.close();

        }
        catch(Exception e)
        {
            System.out.println("Whoop  s! " + e.toString());
        }

    }

}

/* sends out (or rather just makes available) the provided msg 
 * */
class msg_Thread extends Thread 
{

    Socket threadSoc;
    long msg_data;

    msg_Thread (Socket inSoc, long msg_data) 
    {
        threadSoc = inSoc;
        this.msg_data = msg_data;
    }

    public void run()
    {
        try 
        {
              PrintStream SocOut = new
              PrintStream(threadSoc.getOutputStream());
              SocOut.println(msg_data);
        }

        catch (Exception e)
        {
            System.out.println("Whoops!" + e.toString());
        }

        try 
        {
            threadSoc.close();
        }
        catch (Exception e) 
        {
            System.out.println("Oh no! " +
            e.toString());
        }
    }
}





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


public class processReceiveHelper 
{
        Socket appSoc;
        BufferedReader in;
        String message;
        String host;
        int port;

        processReceiveHelper(String host,int port) 
        {
            try 
            {
                appSoc = new Socket(host,port);
                in = new BufferedReader(new InputStreamReader(appSoc.getInputStream()));
                message = in.readLine();
                System.out.println(message); 
                    /* Tokenizer code comes here 
                     * Alongwith the code for 
                     * updating the process object's
                     * data
                     * */

            }
            catch (Exception e) 
            {
                System.out.println("Died... " +
                e.toString());
            }

        }
}




public class Orchestrator 
{



    public static void main(String[] args)
    {
        processSendHelper psh = new processSendHelper(1, 2, 1237644, 6666, 2002);
        processReceiveHelper prh = new processReceiveHelper("localhost", 2002);

    }
}

РЕДАКТИРОВАТЬ:

Я нашел проблему.Причина была в том, что я запускал сервер и клиент из одной и той же основной программы.

сработало следующее:

enter image description here

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Это означает, что уже существует приложение, работающее на порту 6666, которое не позволяет вашему приложению Java использовать его. Однако, в равной степени возможно, что запущенный процесс вашего Java-приложения все еще удерживается на 6666. Завершите все запущенные Java-процессы и попробуйте перезапустить код - если он все еще не работает, у вас есть другое приложение, использующее 6666, и вам будет лучше используя другой порт.

1 голос
/ 04 марта 2012

Это происходит, когда вы запускаете программу во второй раз? Вы можете установить setReuseAddress (true) для этого сокета.

1 голос
/ 04 марта 2012

Это означает, что порт 6666 уже используется. Для этого есть две основные причины / решения:

  • Некоторые другие программы используют этот порт. Решение: выберите другой порт.
  • Ваша старая Java-программа зависает и все еще "использует" этот порт. Закройте все зависшие Java-программы и попробуйте снова. Если это не решит вашу проблему, выберите другой порт.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...