Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BindException, address is already in use by JVM_bind 
V
    Опции темы
BinaryEvil
Дата 8.12.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: нет
Всего: 2



сетевое приложение для сокета, используется порт 3281. пробовал менять - то же самое. тестирую на localhost
как устранить ошибку?
PM MAIL   Вверх
LSD
Дата 8.12.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Проверь, что этот порт свободен. Под Windows надо в консоли выполнить:
Код
netstat -anb -p TCP



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BinaryEvil
Дата 8.12.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: нет
Всего: 2



LSD, проверил, порт 3281 свободен
PM MAIL   Вверх
LSD
Дата 8.12.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Тогда, давай сюда код.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BinaryEvil
Дата 8.12.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: нет
Всего: 2



это моя первая прога на java, компилирую через javac. на компе есть netbeans, но я им не пользуюсь.

это сервер крестиков ноликов
Код

import java.applet.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.util.*;

public class XOgameServ extends Applet 
{
    Server ServerThread = null; 
    public boolean modified=false;
    public byte im,jm;
    public int[][] cells = new int [3][3];
    Dimension dim;
    public int turn;
    public void init()
    {
        dim = getSize();
        turn=0;
        for(int i=0;i<3;i++) for(int j=0;j<3;j++) cells[i][j]=-1;
    }
    public void modify(int i,int j,int xo)
    {
        cells[i][j]=xo;
        turn=1-xo;
    }
    public void setModified(boolean m)
    {
        modified=m;
    }
    public void start()
    {
        if (ServerThread==null)
        {
            ServerThread = new Server(this);
            ServerThread.start();
        }
    }
    public void stop()
    {
        if (ServerThread != null)
         {
               ServerThread.stop();
               ServerThread = null;
        }
    }
    public void paint(Graphics g) 
    {
        int xStep = dim.width/3;
        int yStep = dim.height/3;
        g.clearRect(0,0,dim.width-1,dim.height-1);
        g.setColor(Color.white);
        g.fillRect(0,0,dim.width-1,dim.height-1);
        g.setColor(Color.black);
        for(int i=0;i<3;i++) for(int j=0;j<3;j++)
        {
            g.drawRect(i*xStep,j*yStep,xStep,yStep);
            switch (cells[i][j]) 
            {
                case 0: 
                {
                    g.drawLine(i*xStep,j*yStep,(i+1)*xStep,(j+1)*yStep);
                    g.drawLine(i*xStep,(j+1)*yStep,(i+1)*xStep,j*yStep); 
                    break;
                }
                case 1: 
                {
                    g.drawArc(i*xStep,j*yStep,xStep,yStep,0,360);
                    break;
                }
                default: break;
            }
        }
    }
    public boolean mouseUp(Event evt, int x, int y)
    {
        int i=3*x/dim.width;
        int j=3*y/dim.height;
        if (turn==0 && cells[i][j]==-1)
        {
            cells[i][j]=0;
            turn=1;
            im=(byte)i;jm=(byte)j;
            setModified(true);
            repaint();
        }
        return true;
    }
}


class Server extends Thread
{
    XOgameServ a;
    public Server (XOgameServ appl) 
    {
        a=appl;
        System.out.println("Server thread started");
    }
    public void run()
    {
        try
        {
            ServerSocket ss; 
            Socket s; 
            InputStream is; 
            OutputStream os;
            ss=new ServerSocket(3281);
            s=ss.accept();
            is=s.getInputStream();
            os=s.getOutputStream();
            byte buf[]=new byte[200];int length;
            while(true)
            {
                if (a.modified) 
                {
                    buf[0]=a.im;buf[1]=a.jm;
                    String str=new String(buf,0);
                    System.out.println("> " + str);
                    os.write(buf,0,2);
                    os.flush();
                    a.setModified(false);
                }
                length=is.read(buf);
                if (length==-1) break;
                String str=new String(buf,0);
                System.out.println(">> "+str);
                int x=buf[0];int y=buf[1];
                if (a.cells[x][y]==-1 && a.turn==1)
                {
                    a.modify(x,y,1);
                    a.repaint();
                }
            }
            is.close();
            os.close();
            s.close();
            ss.close();
        }
        catch(Exception ioe)    
        {
            System.out.println(ioe.toString());
            stop();
        }  
    }
}


а это клиент:
Код

import java.applet.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.util.*;

public class XOgameClient extends Applet 
{
    Client ClientThread = null; 
    public boolean modified=false;
    public byte im,jm;
    public int[][] cells = new int [3][3];
    Dimension dim;
    public int turn;
    public void init()
    {
        dim = getSize();
        turn=0;
        for(int i=0;i<3;i++) for(int j=0;j<3;j++) cells[i][j]=-1;
        
    }
    public void modify(int i,int j,int xo)
    {
        cells[i][j]=xo;
        turn=1-xo;
    }
    public void setModified(boolean m)
    {
        modified=m;
    }
    public void start()
    {
        if (ClientThread==null)
        {
            ClientThread = new Client(this);
            ClientThread.start();
        }
    }
    public void stop()
    {
        if (ClientThread != null)
         {
               ClientThread.stop();
               ClientThread = null;
        }
    }
    public void paint(Graphics g) 
    {
        int xStep = dim.width/3;
        int yStep = dim.height/3;
        g.clearRect(0,0,dim.width-1,dim.height-1);
        g.setColor(Color.white);
        g.fillRect(0,0,dim.width-1,dim.height-1);
        g.setColor(Color.black);
        for(int i=0;i<3;i++) for(int j=0;j<3;j++)
        {
            g.drawRect(i*xStep,j*yStep,xStep,yStep);
            switch (cells[i][j]) 
            {
                case 0: 
                {
                    g.drawLine(i*xStep,j*yStep,(i+1)*xStep,(j+1)*yStep);
                    g.drawLine(i*xStep,(j+1)*yStep,(i+1)*xStep,j*yStep); 
                    break;
                }
                case 1: 
                {
                    g.drawArc(i*xStep,j*yStep,xStep,yStep,0,360);
                    break;
                }
                default: break;
            }
        }
    }
    public boolean mouseUp(Event evt, int x, int y)
    {
        int i=3*x/dim.width;
        int j=3*y/dim.height;
        if (turn==1 && cells[i][j]==-1)
        {
            cells[i][j]=1;
            turn=0;
            im=(byte)i;jm=(byte)j;
            modified=true;
            repaint();
        }
        return true;
    }
}

class Client extends Thread
{
    XOgameClient a;
    public Client (XOgameClient appl) 
    {
        a=appl;
        System.out.println("Client thread started");        
    }
    public void run()
    {
        try
        {
            Socket s; InputStream is; OutputStream os;
            s=new Socket("localhost",3281);
            is=s.getInputStream();
            os=s.getOutputStream();
            byte buf[]=new byte[200];int length;
            while(true)
            {
                if (a.modified) 
                {
                    buf[0]=a.im;buf[1]=a.jm;
                    String str=new String(buf,0);
                    System.out.println("> " + str);                    
                    os.write(buf,0,2);
                    os.flush();
                    a.setModified(false);
                }
                length=is.read(buf);
                if (length==-1) break;
                String str=new String(buf,0);
                System.out.println(">> " + str);
                int x=buf[0];int y=buf[1]; 
                a.modify(x,y,0);
                if (a.cells[x][y]==-1 && a.turn==0)
                {
                    a.modify(x,y,0);
                    a.repaint();
                }
            }
            is.close();
            os.close();
            s.close();
        }
        catch(Exception ioe)    
        {
            System.out.println(ioe.toString());
            stop();
        }  
    }
}



файл html для сервера:
Код

<applet code="XOgameServ.class" 
width=300 height=300>

файл html для клиента:
Код

<applet code="XOgameClient.class" 
width=300 height=300>

PM MAIL   Вверх
LSD
Дата 8.12.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Стоп! Зачем сервер делать в виде апплета? Его надо делать в виде standalone приложения.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BinaryEvil
Дата 8.12.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: нет
Всего: 2



то есть в апплете работать не будет?
PM MAIL   Вверх
LSD
Дата 8.12.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(BinaryEvil @  8.12.2006,  15:39 Найти цитируемый пост)
то есть в апплете работать не будет?

Не будет. У апплетов есть серьезные ограничения безопасности.

Добавлено @ 15:51 
Да и не нужен тут апплет совершенно.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BinaryEvil
Дата 8.12.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: нет
Всего: 2



спасибо большое
а хотя б "слушаю" я правильно? надо клиент переделывать?
PM MAIL   Вверх
LSD
Дата 8.12.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(BinaryEvil @  8.12.2006,  15:55 Найти цитируемый пост)
а хотя б "слушаю" я правильно?

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

Цитата(BinaryEvil @  8.12.2006,  15:55 Найти цитируемый пост)
надо клиент переделывать?

Надо тоже сделать возможность закрыть соединение с сервером.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BinaryEvil
Дата 8.12.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 4.3.2006

Репутация: нет
Всего: 2



ещё раз спасибо 
PM MAIL   Вверх
LSD
Дата 8.12.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Пожалуйста.
У нас есть кнопка Пометить вопрос как решенный, можешь смело ей пользоваться smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.