Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Java
Перезагрузить страницу Клиенты + сервер
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Oxlamon Oxlamon вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.04.2012
По умолчанию Клиенты + сервер - 23.05.2015, 22:34

Пытаюсь написать следующее:
Один сервер, несколько клиентов. Клиент отправляет серверу строку, сервер обрабатывает и возвращает клиенту объект (именно тому клиенту, который отправил строку).

Проблема: с одним клиентом всё работает отлично. Если открыть второго, со вторым работает нормально. Если вернуться к первому, принимает 1 сообщение (ответ на которое отсылается во 2-ой клиент, что уже плохо), после чего оба клиента прекращают работать вообще.

Прошу помочь.

Код сервера:
Java Код:
// сервер
public class serverWindow extends JFrame {

    private JPanel contentPane;
    private static JTextField tfAddition;
    static JTextPane tp;
   
    // connection stuff
    static ServerSocket ss = null;
    static Socket soc = null;
    static DataInputStream din;
    static ObjectOutputStream obout;
    static int port = 1255;

    public static void main(String[] args) throws IOException
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    serverWindow frame = new serverWindow();
                    frame.setVisible(true);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
       
        try
        {
            ss = new ServerSocket(port);   
            while(true)
            {
                try
                {
                    soc = ss.accept();             
                    echoThread X = new echoThread(soc, tp);
                    X.start();
                }
                catch(Exception ex)
                {
                    ex.printStackTrace();
                }
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            ss.close();
        }
    }

    /**
     * Create the frame.
     */

    public serverWindow() {
        setTitle("Server");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 11, 414, 183);
        contentPane.add(scrollPane);
       
        tp = new JTextPane();
        tp.setEditable(false);
        scrollPane.setViewportView(tp);
    }
}
Тред для нового клиента:
Java Код:
public class echoThread extends Thread
{
    protected Socket soc;
    public JTextPane tp;
    static DataInputStream din = null;
    static ObjectOutputStream obout = null;
   
    public echoThread(Socket soc, JTextPane tp)
    {
        this.soc = soc;
        this.tp = tp;
    }
   
    public void run()
    {
        try
        {
            din = new DataInputStream(this.soc.getInputStream());
            obout = new ObjectOutputStream(soc.getOutputStream());

            while(true)
            {
                String message = din.readUTF();                        
                tp.setText(tp.getText().trim() + "\n" + message);  
                Responce res = new Responce(message, message.length());
                obout.writeObject(res);
                obout.flush();
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            return;
        }
        finally
        {
            try
            {
                soc.close();
                din.close();
                obout.close();
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
                return;
            }
        }
    }
}
Клиент:
Java Код:
public class clientW extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private static JTextPane textPane;
   
    // sockets
    static Socket soc = null;
    static ObjectInputStream obin = null;
    static DataOutputStream dout = null;
    static int port = 1255;
    static String host = "localhost";

    public static void main(String[] args) throws IOException
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    clientW frame = new clientW();
                    frame.setVisible(true);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
       
        try
        {
            try
            {
                soc = new Socket(host, port);
                dout = new DataOutputStream(soc.getOutputStream());
                obin = new ObjectInputStream(soc.getInputStream());
                while(true)
                {
                    Responce res = (Responce) obin.readObject();
                    textPane.setText(textPane.getText().trim() + "\n" + res.combineText());
                }
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }

        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }          
        finally
        {
            soc.close();
            obin.close();
            dout.close();
        }
    }

    public clientW() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JButton btnNewButton = new JButton("send");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0)
            {
                try
                {
                    dout.writeUTF(textField.getText().trim());
                    dout.flush();
                }
                catch(Exception ex)
                {
                    ex.printStackTrace();
                }
            }
        });
        btnNewButton.setBounds(335, 227, 89, 23);
        contentPane.add(btnNewButton);
       
        textField = new JTextField();
        textField.setBounds(10, 227, 315, 21);
        contentPane.add(textField);
        textField.setColumns(10);
       
        textPane = new JTextPane();
        textPane.setEditable(false);
        textPane.setBounds(10, 11, 414, 205);
        contentPane.add(textPane);
    }
}
Ответить с цитированием
  (#2 (permalink)) Старый
Oxlamon Oxlamon вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.04.2012
По умолчанию 24.05.2015, 03:03

Разобрался.
Проблема была в том, что в echoThread din и obout объявлены как static, из-за чего и возникают проблемы. Если поменять на public всё работает на ура.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FTP сервер начинающийй Любые вопросы от новичков 6 03.01.2015 22:31
Запускать банк-клиенты с помощью разных браузеров adiksever Windows XP 11 07.11.2012 20:28
сервер kam Любые вопросы от новичков 0 17.04.2012 12:58
VPS сервер Varvert Сетевые подключения 2 02.09.2011 16:21
СЕрвер CS 1.6 Yaroslav Hulevatyi Компьютерные игры 2 31.01.2011 22:25
Сервер и его БП Komissar Rex Подбор комплектующих 3 19.02.2010 21:59
Маршрутизатор для выделенной линии, Коммутатор, Принт-сервер, Файловый сервер sandzhi Администрирование и базы данных 0 11.12.2008 19:34
После установки дополнительной сетевой карты на сервер HP ML110 сервер выключается. alok Техническая поддержка 2 29.05.2008 14:13
ICQ клиенты не принимают файлы Ar4i Софт и программы 12 15.04.2008 01:30
ftp сервер KiR Администрирование и базы данных 1 30.08.2007 19:54
Работа с e-mail не используя почтовые клиенты imported_ZED Delphi 12 03.09.2005 17:05
Сервак Win2003, клиенты Win2K, SQL 2000 PE. Проблема конекта Keray MSSQL Server 0 14.08.2004 14:11



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов