Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > сетевая ошибка


Автор: #Maestro# 2.7.2009, 11:31
господа, запускаю клиент-серверное приложение
обращение к серверу (через порт 8823) реализуется замечательно, но только единственный раз, после чего срабатывает исключение:
Код

java.net.BindException: Address already in use: JVM_Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)

пробовал другие порты (8923). картина та же. почему?

фрагмент кода сервера:
Код

    ServerSocket s = new ServerSocket(8823);
            incoming = s.accept();
            Runnable r = new TestServerHandler(incoming);
            Thread t = new Thread(r);
            t.start();

Автор: LSD 2.7.2009, 13:21
Ты неправильно используешь ServerSocket. Тебе надо в начале работы создать его, а затем в цикле выполнять accept(). Каждый раз как клиент будет соединяться, ты будешь получать Socket который связан с конкретным клиентом. В конце работы ServerSocket надо закрыть (все клиентские Socket тоже).

Автор: #Maestro# 3.7.2009, 14:46
в качестве просвещения - можно пример?

Автор: LSD 3.7.2009, 17:13
http://java.sun.com/docs/books/tutorial/networking/sockets/clientServer.html

Автор: #Maestro# 6.7.2009, 11:12
большое спосибо!

Автор: #Maestro# 16.7.2009, 16:38
и всё же я не понял!! smile 

каким образом чат всегда ожидает сообщение? я так понимаю, что в конструкторе сервера запущено два потока:
один для отправления сообщений, второй - ожидает получение сообщений.

не получается создать второй поток. то есть как только сервер хочет получить сообщение - приложение виснет до тех пор пока сообщение не предёт.
Код


    public void connect()
    {
        try
        {
        socket = new ServerSocket(8923);
       // while (true)
            {

                Runnable r = new TestServerHandler(socket);
                Thread t = new Thread(r);
                t.start();
            }
        }

    class TestServerHandler implements Runnable        //вложенный класс
    {
                public void run()
        {
            try
            {
            incoming = socket.accept();

            .......

            socket.close();
        catch(IOException e) {e.printStackTrace();}
    }}}


как написать чат с работающими двумя потоками??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)