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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> простое сетеовое приложение 
:(
    Опции темы
initmax
Дата 29.3.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброго, 
возникла задача написать следующую простенькую программку дабы разобраться в сетевом программинге:

1) передача по UDP сообщений от одного приложения к другому указав IP+port
2) передача по сети файла от приложения к приложению
3) функция обратного звонка, т.е. через одно приложение отправляем HELLO а в ответи приходит ПРИВЕТ

Скажите в каком направлении гуглить, какие пакеты разсматривать и есть ли примеры этого всего дела?
спасибо.
PM MAIL   Вверх
LSD
Дата 29.3.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Overview of Networking
All About Sockets
All About Datagrams
Programmatic Access to Network Parameters



Цитата(initmax @  29.3.2010,  11:52 Найти цитируемый пост)
3) функция обратного звонка, т.е. через одно приложение отправляем HELLO а в ответи приходит ПРИВЕТ

Обычно под функцией обратного звонка понимают немного другое. Приложение А шлет приложению Б сигнал, что оно хочет установить соединение, а в ответ приложение Б инициирует соединение с А.


--------------------
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   Вверх
initmax
Дата 30.3.2010, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Хорошо, а касательно первый двух вопросов, какими методами возможно передать сообщение по сети используея протокол UDP ?
PM MAIL   Вверх
LSD
Дата 30.3.2010, 11: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   Вверх
initmax
Дата 1.4.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



почитал, написал клиент/серверное приложение "простое".
В начале запускается сервер который инициализирует "впускающий сокет"
входящий поток символов переводит в верхний регистр используя функцию 
 capitalizedSentence = clientSentence.toUpperCase()


затем запускается клиент, в общем вот код:

Код


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * CalculatorForm.java
 *
 * Created on Mar 17, 2010, 11:34:12 AM
 */

package GuiNet;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import java.io.*;
import java.io.InputStreamReader;
import java.net.*;


/**
 *
 * @author max
 */
public class GuiForm extends javax.swing.JFrame {


    /** Creates new form CalculatorForm */
    public GuiForm() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jDialog1 = new javax.swing.JDialog();
        jDialog2 = new javax.swing.JDialog();
        jFrame1 = new javax.swing.JFrame();
        IP1 = new javax.swing.JTextField();
        Port = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        TextForSend = new javax.swing.JTextPane();
        Send = new javax.swing.JButton();
        IP2 = new javax.swing.JTextField();
        IP3 = new javax.swing.JTextField();
        IP4 = new javax.swing.JTextField();
        printMessage = new javax.swing.JLabel();
        TCPServer = new javax.swing.JButton();
        TcpClient = new javax.swing.JButton();

        javax.swing.GroupLayout jDialog1Layout = new javax.swing.GroupLayout(jDialog1.getContentPane());
        jDialog1.getContentPane().setLayout(jDialog1Layout);
        jDialog1Layout.setHorizontalGroup(
            jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        jDialog1Layout.setVerticalGroup(
            jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jDialog2Layout = new javax.swing.GroupLayout(jDialog2.getContentPane());
        jDialog2.getContentPane().setLayout(jDialog2Layout);
        jDialog2Layout.setHorizontalGroup(
            jDialog2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        jDialog2Layout.setVerticalGroup(
            jDialog2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jFrame1Layout = new javax.swing.GroupLayout(jFrame1.getContentPane());
        jFrame1.getContentPane().setLayout(jFrame1Layout);
        jFrame1Layout.setHorizontalGroup(
            jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        jFrame1Layout.setVerticalGroup(
            jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        IP1.setMaximumSize(new java.awt.Dimension(1, 1));
        IP1.setMinimumSize(new java.awt.Dimension(1, 1));
        IP1.setPreferredSize(new java.awt.Dimension(1, 1));
        IP1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                IP1ActionPerformed(evt);
            }
        });

        Port.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                PortActionPerformed(evt);
            }
        });

        jLabel1.setText("Enter IP");

        jLabel2.setText("Enter port");

        jScrollPane1.setViewportView(TextForSend);

        Send.setText("Send");
        Send.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SendActionPerformed(evt);
            }
        });

        IP2.setMaximumSize(new java.awt.Dimension(1, 1));
        IP2.setMinimumSize(new java.awt.Dimension(1, 1));
        IP2.setPreferredSize(new java.awt.Dimension(1, 1));
        IP2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                IP2ActionPerformed(evt);
            }
        });

        IP3.setMaximumSize(new java.awt.Dimension(1, 1));
        IP3.setMinimumSize(new java.awt.Dimension(1, 1));
        IP3.setPreferredSize(new java.awt.Dimension(1, 1));
        IP3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                IP3ActionPerformed(evt);
            }
        });

        IP4.setMaximumSize(new java.awt.Dimension(1, 1));
        IP4.setMinimumSize(new java.awt.Dimension(1, 1));
        IP4.setPreferredSize(new java.awt.Dimension(1, 1));
        IP4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                IP4ActionPerformed(evt);
            }
        });

        printMessage.setText("Print message:");

        TCPServer.setText("TCP Server");
        TCPServer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                TCPServerActionPerformed(evt);
            }
        });

        TcpClient.setText("TCP Client");
        TcpClient.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                TcpClientActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(printMessage, javax.swing.GroupLayout.DEFAULT_SIZE, 296, Short.MAX_VALUE)
                        .addGap(333, 333, 333))
                    .addComponent(Send)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(33, 33, 33)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(IP1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(IP2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(IP3, javax.swing.GroupLayout.DEFAULT_SIZE, 55, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(IP4, javax.swing.GroupLayout.DEFAULT_SIZE, 55, Short.MAX_VALUE)
                        .addGap(39, 39, 39)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(Port, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(46, 46, 46)
                                .addComponent(TcpClient)
                                .addGap(18, 18, 18)
                                .addComponent(TCPServer))
                            .addComponent(jLabel2)))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 629, Short.MAX_VALUE))
                .addGap(110, 110, 110))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(IP1, javax.swing.GroupLayout.DEFAULT_SIZE, 19, Short.MAX_VALUE)
                            .addComponent(IP2, javax.swing.GroupLayout.DEFAULT_SIZE, 19, Short.MAX_VALUE)
                            .addComponent(IP3, javax.swing.GroupLayout.DEFAULT_SIZE, 19, Short.MAX_VALUE)
                            .addComponent(IP4, javax.swing.GroupLayout.DEFAULT_SIZE, 19, Short.MAX_VALUE)))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(TcpClient)
                        .addComponent(TCPServer))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addGap(22, 22, 22))
                    .addComponent(Port, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(53, 53, 53)
                .addComponent(printMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(Send)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void PortActionPerformed(java.awt.event.ActionEvent evt) {                                     
        // TODO add your handling code here:
    }                                    

    private void SendActionPerformed(java.awt.event.ActionEvent evt) {                                     
 
       
    }                                    

    private void IP1ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
    }                                   

    private void IP2ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
    }                                   

    private void IP3ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
    }                                   

    private void IP4ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
    }                                   


//for get Port
    public int getPort(){
        try{
            port = Integer.parseInt(this.Port.getText());
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(this, "Bad enter port", "Error", WIDTH);
            return 0;
        }

        return(Integer.parseInt(this.Port.getText()));
    }


//for get IP
    public String getIP(){

        try{
            getIP1 = Integer.parseInt(this.IP1.getText());
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Bad first byte into IP", "Error", WIDTH);
            return null;
        }

        try{
            getIP2 = Integer.parseInt(this.IP2.getText());
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Bad second byte into IP", "Error", WIDTH);
            return null;
        }

        try{
            getIP3 = Integer.parseInt(this.IP3.getText());
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Bad third byte into IP", "Error", WIDTH);
            return null;
        }

        try{
            getIP4 = Integer.parseInt(this.IP4.getText());
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Bad fourth byte into IP", "Error", WIDTH);
            return null;
        }

//send text for user
        try{
            sendText = this.TextForSend.getText();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Error send text", "Error", WIDTH);
            return null;
        }

        this.printMessage.setText(sendText);

        String stringIP = null;

        stringIP = this.IP1.getText();
        stringIP +="."+this.IP2.getText();
        stringIP +="."+this.IP3.getText();
        stringIP +="."+this.IP4.getText();

        return stringIP;
    }

    
    private void TCPServerActionPerformed(java.awt.event.ActionEvent evt) {                                          
        int strPort=0;
        strPort = getPort();
/*
 Здесь происходит создание объекта welcomeSocket типа ServerSocket.
 Объект welcomeSocket представляет собой ВПУСКАЮЩИЙ сокет, с помощью которого клиент
 устанавливает первоначальный контакт с сервером. Для этого сокета используется порт 
 с номером 6789, совпадающим с номером порта сокета клиента.
 Протокол TCP устанавливает прямой виртуальный канал между сокетом clientSocket 
 на клиентской стороне и connectionSocket на серверной стороне, после чего клиент и сервер
 могут свободно осуществлять обмен информацией. После создания сокета connectionSocket
 сервер может вновь использовать сокет welcomeSocket для инициирования других соединений
 с клиентами 
*/
        try {
            welcomeSocket = new ServerSocket(strPort);
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }


         while(true)
         {
            
            try {
                connectionSocket = welcomeSocket.accept();
            } catch (IOException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
            }

            try {
                inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            } catch (IOException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
            }

         
            try {
                outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            } catch (IOException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
            }

            try {
                clientSentence = inFromClient.readLine();
            } catch (IOException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println("Received: " + clientSentence);
            capitalizedSentence = clientSentence.toUpperCase() + '\n';

            try {
                outToClient.writeBytes(capitalizedSentence);
            } catch (IOException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
            }
         }

    }                                         


    private void TcpClientActionPerformed(java.awt.event.ActionEvent evt) {                                          
//Получить IP с формы
        String strIP=null;
        int strPort=0;
        strIP = getIP();
        strPort = getPort();
/*
 * Здесь происходит создание потокового объекта in From User типа BufferedReader.
 * Инициализация потока данных производится объектом System.in, связывающим поток
 * со стандартным устройством ввода. После выполнения этой команды клиенту начинают
 * передаваться символы, вводимые пользователем с клавиатуры.
*/
        inFromUser = new BufferedReader( new InputStreamReader(System.in));

/*
 * В приведенной строке происходит создание объекта clientSocket типа Socket.
 * Кроме того, при этом инициируется TCP-соединение между клиентом и сервером.
 * Слово hostname необходимо заменить именем хоста, сохранив кавычки
 * (например, “_fling.seas.upenn.edu”). Перед началом установки TCP-соединения клиент
 * производит DNS-запрос IP-адреса хоста. Значение 6789 — это номер порта;
 * вы можете выбрать другое число, однако необходимо помнить, что клиентская и серверная
 * стороны должны использовать один и тот же номер порта. Как упоминалось ранее,
 * IP-адрес хоста в совокупности с номером порта приложения идентифицирует серверный процесс.
 */        
        
        if(strIP != null && strPort != 0) {
            System.out.println("Мой адрес"+strIP);
            try {
                clientSocket = new Socket(strIP, strPort);
                } catch (UnknownHostException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

/*
 * Здесь происходит создание потоковых объектов, связанных с сокетом.
 * Поток outToServer обеспечивает вывод программы через сокет, а поток inFromServer
 * предназначен для приема данных от серверной стороны
*/
        try {
             outToServer = new DataOutputStream(clientSocket.getOutputStream());
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
             inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }

/*
 * Эта строка помещает последовательность символов, вводимых пользователем,
 * в переменную sentence. Ввод оканчивается нажатием пользователем клавиши Enter.
 * Как видим, для помещения символов в переменную используется потоковый объект inFromUser.
*/
        try {
            sentence = inFromUser.readLine();
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }
/*
 * Здесь строка sentence, снабженная символом возврата каретки,
 * помещается в выходной поток outToServer. После этого она будет передана через сокет в канал,
 * соединяющий клиента с сервером.
*/
        try {
            outToServer.writeBytes(sentence + '\n');
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }
/*
 * Ответ сервера принимается во входной поток inFromServer,
 * откуда принятая строка копируется в переменную modifiedSentence.
 * Помещение символов в строку modifiedSentence продолжается до тех пор,
 * пока не будет получен символ возврата каретки.
*/
        try {
            modifiedSentence = inFromServer.readLine();
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }


        System.out.println("FROM SERVER: " + modifiedSentence);
        try {
            clientSocket.close();
        } catch (IOException ex) {
            Logger.getLogger(GuiForm.class.getName()).log(Level.SEVERE, null, ex);
        }
     
    }                                         

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GuiForm().setVisible(true);
            }
        });
    }


    //ip forms variables
    private int getIP1;
    private int getIP2;
    private int getIP3;
    private int getIP4;
    private int port;
    private String sendText;

    //server variables
    private Socket connectionSocket;
    private BufferedReader inFromClient;
    private DataOutputStream outToClient;
    private String clientSentence;
    private String capitalizedSentence;
    private ServerSocket welcomeSocket;

    //Client variables     
    private BufferedReader inFromServer;
    private BufferedReader inFromUser;
    private DataOutputStream outToServer;
    private Socket clientSocket;
    private String sentence; //хранения строки, вводимой пользователем и передаваемой серверу
    private String modifiedSentence; //Принимает от сервера и выводимую на стандартное устройство вывода.

    // Variables declaration - do not modify                     
    private javax.swing.JTextField IP1;
    private javax.swing.JTextField IP2;
    private javax.swing.JTextField IP3;
    private javax.swing.JTextField IP4;
    private javax.swing.JTextField Port;
    private javax.swing.JButton Send;
    private javax.swing.JButton TCPServer;
    private javax.swing.JButton TcpClient;
    private javax.swing.JTextPane TextForSend;
    private javax.swing.JDialog jDialog1;
    private javax.swing.JDialog jDialog2;
    private javax.swing.JFrame jFrame1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel printMessage;
    // End of variables declaration                   

}


вопросы:
0) первая итерация между клиент/сервером проходит успешно, т.е. в ответ получаю строку в верхнем регистре, остальные вводимые мной строчки не переводятся и не приходят обратно от сервера, в чём может быть проблема?

1) при использовании GUI нажатии кноки @Start Server@ кнопка залипает и программа больше не реагируют ни на какаие команды, т.е. сервер запускается в бесконечном цикле опрашивая порт "входящий" как можно организовать "запуск/остановку" сервера через GUI
PM MAIL   Вверх
LSD
Дата 1.4.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



У тебя неправильно написан сервер. Смотри:
1. ты открываешь серверный сокет 
2. ждешь пока присоединится первый клиент
3. когда клиент соединяется, ты получаешь обычный сокет, который используется для связи с этим клиентом и только с этим клиентом
4. дальше ты ждешь от клиента строку, переводишь ее в верхний регистр и отправляешь обратно
5. после чего цикл начинается заново с п. 2., ты ждешь нового клиента, а от старого данные уже не обрабатываешь и вообще теряешь ссылку на его сокет


--------------------
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   Вверх
initmax
Дата 1.4.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



хм, значит нужно каким-то образом инициализировать каждого вновь подключившегося клиента, в случае с J2EE это можно делать на кукисах, а как быть в данном случае?

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


Leprechaun Software Developer
****


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

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



Цитата(initmax @  1.4.2010,  15:35 Найти цитируемый пост)
хм, значит нужно каким-то образом инициализировать каждого вновь подключившегося клиента, в случае с J2EE это можно делать на кукисах, а как быть в данном случае?

В данном случае, когда клиент присоединяется ты получаешь Socket, который относится только к этому клиенту и ни к кому больше.


--------------------
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.1915 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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