Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Поделитесь кто может! / 10 сообщений из 10, страница 1 из 1
03.05.2007, 22:10:33
    #34503519
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
Здравствуйте!
Я вот уже какой день протираю штаны возле компа, а понять как написать графическое клиен-серверное приложение (использую стандартные графические компоненты IDE NetBeans) я не могу.
А главной проблеммой является то, что не понятно, в какой момент сокеты определять, чтоб можно было доступится к входным потокам.
Мож кто сталкивался с написанием таких прожек, буду просто счастлив, если кто поделится, или подскажет как это сделать!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
03.05.2007, 23:19:54
    #34503585
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
этот класс ловит новые подключения и отправляет их на обслуживание
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 public   class  Server  extends  Thread
{
     public   void  run() 
    {
         try 
        {
            Properties props =  new  Properties();
            FileInputStream in
                    =  new  FileInputStream("database.properties");
            props.load(in);
            in.close();

            String port = props.getProperty("socket.port");
             int  i =  1 ;
            ServerSocket s =  new  ServerSocket(Integer.parseInt(port));
             for  (;;)
            {
                Socket incoming = s.accept( );
                
                /*JOptionPane.showMessageDialog(null,
				"Подключение " + i, "Новое подключение",
				JOptionPane.INFORMATION_MESSAGE);*/

                Thread t =  new  ThreadedHandler(incoming);
                t.start();
                i++;
            } 
                        
        }
         catch  (Exception e)
        {
            JOptionPane.showMessageDialog( null ,
				e.getMessage(), "Ошибка прослушивания порта",
				JOptionPane.ERROR_MESSAGE);
        }
    }
}

а этот класс обслуживает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
 class  ThreadedHandler  extends  Thread
{
    public  ThreadedHandler(Socket i)
   {
       incoming = i;
   }

    public   void  run()
   {
        try 
       {
           BufferedReader in =  new  BufferedReader
             ( new  InputStreamReader(incoming.getInputStream()));
           PrintWriter out =  new  PrintWriter
                 (incoming.getOutputStream(), true /* autoFlush */);

            boolean  done = false;

            while  (!done)
           {
               String line = in.readLine();

                if  (line !=  null )
               {
                   ...
                   читаем запрос и формируем ответ тут
                   ...
               }
           }
           incoming.close();

       }
        catch  (Exception e)
       {
           JOptionPane.showMessageDialog( null ,
                    e.getMessage(), "Ошибка обмена данными",
                    JOptionPane.ERROR_MESSAGE);
       }
   }
     private  Socket incoming;
}

ну вроде как-то так :)
...
Рейтинг: 0 / 0
04.05.2007, 16:04:40
    #34505611
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
:)
Спасибо большое за пример!
Только я еще хотел уточнить, какие библиотеки надо подключить, так как с теми, что я подключил ( import java.io.*; import java.net.*;)он не воспринимает
Properties props = new Properties(); //cannot find symbol
...
Рейтинг: 0 / 0
04.05.2007, 16:36:29
    #34505741
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
light_ret:)
Спасибо большое за пример!
Только я еще хотел уточнить, какие библиотеки надо подключить, так как с теми, что я подключил ( import java.io.*; import java.net.*;)он не воспринимает
Properties props = new Properties(); //cannot find symbol

В netbeans в окне редактирования нажми Ctrl+Shift+F
...
Рейтинг: 0 / 0
04.05.2007, 16:38:28
    #34505753
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
mozheyko_d light_ret:)
Спасибо большое за пример!
Только я еще хотел уточнить, какие библиотеки надо подключить, так как с теми, что я подключил ( import java.io.*; import java.net.*;)он не воспринимает
Properties props = new Properties(); //cannot find symbol

В netbeans в окне редактирования нажми Ctrl+Shift+F

тьфу, наврал, Alt +Shift+F , хотя предыдущая комбинация тоже полезная.
...
Рейтинг: 0 / 0
04.05.2007, 18:37:25
    #34506066
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
light_ret:)
Properties props = new Properties(); //cannot find symbol
Спасибо! Относительно данной строки я разобрался!! Сервер у меня заработал! :)
Только вот есть вопрос теперь относительно клиента.
Я для теста попробовал конэктиться своим клиентом (консольным), но мне выдало ошибку:
Exception in thread "main" java.lang.UnsupportedClassVersionError: test_server/M
ain (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)


Привожу код своего клиента:
public static void main(String[] args) throws IOException {

Socket kkSocket = null;
PrintWriter out = null;
BufferedReader in = null;

try {
kkSocket = new Socket("noname", 4444);
out = new PrintWriter(kkSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: taranis.");
System.exit(1);
}

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;

while ((fromServer = in.readLine()) != null) {
System.out.println(fromServer);
if (fromServer.equals("Bye."))
break;

fromUser = "Client: " + stdIn.readLine();
if (fromUser != null) {
System.out.println(fromUser);
out.println(fromUser);
}
}

out.close();
in.close();
stdIn.close();
kkSocket.close();
}
}

Мне кажеться, что ошибка где-то видна, или я совсем не то что-то делаю.
...
Рейтинг: 0 / 0
04.05.2007, 21:07:44
    #34506291
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
Держи пример простенького клиента :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
 import  javax.swing.*;
 import  java.awt.*;
 import  java.awt.event.ActionListener;
 import  java.awt.event.ActionEvent;
 import  java.io.BufferedReader;
 import  java.io.InputStreamReader;
 import  java.io.PrintWriter;
 import  java.net.Socket;
 import  java.net.ServerSocket;

 public   class  SocketClientFrame  extends  JFrame
{
     public  SocketClientFrame()
    {
        setTitle("Сокет клиент");
        Container contentPane = getContentPane();
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
         int  screenHeight = screenSize.height;
         int  screenWidth = screenSize.width;
        setLocation((screenWidth - WIDTH) /  2 , (screenHeight - HEIGHT) /  2 );
        setSize(WIDTH, HEIGHT);

         final  JTextArea textArea =  new  JTextArea( 7 ,  20 );
        JScrollPane scrollPane =  new  JScrollPane(textArea) ;
        textArea.setLineWrap(true);
        contentPane.add(scrollPane, BorderLayout.NORTH);

        JPanel bPan =  new  JPanel();
        contentPane.add(bPan, BorderLayout.SOUTH);

        JButton connBtn =  new  JButton("Подключиться");
        bPan.add(connBtn);
        connBtn.addActionListener( new 
                ActionListener()
                {
                     public   void  actionPerformed(ActionEvent evt)
                    {
                         try 
                        {
                            socket =  new  Socket("127.0.0.1",  8189 ); //Введи свое!!!

                            in =  new  BufferedReader
                                ( new  InputStreamReader(socket.getInputStream()));
                            out =  new  PrintWriter
                                (socket.getOutputStream(), true /* autoFlush */);
                        }
                         catch (Exception e)
                        {
                            JOptionPane.showMessageDialog( null ,
                                e.getMessage(), "Ошибка подключения к сокету!",
                                JOptionPane.ERROR_MESSAGE);
                        }
                    }
                });

        JButton sendBtn =  new  JButton("Отправить");
        bPan.add(sendBtn);
        sendBtn.addActionListener( new 
                ActionListener()
                {
                     public   void  actionPerformed(ActionEvent evt)
                    {
                        String text = textArea.getText();
                        out.println(text);
                        textArea.setText("");
                    }
                });

        JButton cnlBtn =  new  JButton("Выход");
        bPan.add(cnlBtn);
        cnlBtn.addActionListener( new 
                ActionListener()
                {
                     public   void  actionPerformed(ActionEvent evt)
                    {
                        System.exit( 0 );
                    }
                });

    }
     private  Socket socket;
     private  PrintWriter out;
     private  BufferedReader in;
     private   static   final   int  WIDTH =  500 ;
     private   static   final   int  HEIGHT =  200 ;

}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 import  javax.swing.*;

 public   class  SocketClient
{
      public   static   void  main(String[] args)
     {
         SocketClientFrame client =  new  SocketClientFrame();
         client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         client.setVisible(true);
     }

}
...
Рейтинг: 0 / 0
06.05.2007, 03:21:55
    #34507437
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
Dima11Держи пример простенького клиента :)
[/src]

БОЛЬШОЕ-БОЛЬШОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!!
Клиент вообще сказка!!! :)
С консольным сервером работает на ура!
Только вот с сервером оказались проблемы :(
Просто это из-за того, что я не до конца понял ка правильно написать метод
public static void main(String args[]) {}
Я его написал таким образом:

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});


}


Но, по видимому сервер просто не выполняет своих действий.
Подскажите, в чем я ошибся, пожалуйста! :)
Спасибо!!!
...
Рейтинг: 0 / 0
07.05.2007, 09:31:25
    #34508546
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
Всегда рад помочь :) Запускать его надо так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public   static   void  main(String[] args)
    {
            try 
           {
               Server consolServer =  new  Server();
               consolServer.start();
           }
            catch  (Exception e)
           {
               JOptionPane.showMessageDialog( null ,
                       e.getMessage(), "Ошибка при запуске сервера!",
                       JOptionPane.ERROR_MESSAGE);
           }
    }
...
Рейтинг: 0 / 0
09.05.2007, 14:49:46
    #34514601
light_ret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поделитесь кто может!
Большое спасибо за помощ!!!!!!!! :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Поделитесь кто может! / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]