Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сокеты / 9 сообщений из 9, страница 1 из 1
25.04.2007, 16:54:56
    #34487192
MaximGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
Прива. Извенясь за наезженую тему. но... Народ взял пример с этого форума. У меня есть вопрос как сделать так что бы процесс обменна сообщениями между клиентом и сервером не прекращался.
Если не закрываю сокет у меня клиент виснет.
Код: 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.
 import  java.io.ObjectInputStream;
 import  java.io.ObjectOutputStream;
 import  java.net.Socket;
 import  java.net.ServerSocket;

 public   class  Server {

     public   static   void  main(String[] args) {
         new  Server().start();
    }

     public   void  start() {
        ServerSocket ss =  null ;
         try  {
            ss =  new  ServerSocket( 65000 );
        }  catch  (Exception e) {
            e.printStackTrace();
            System.exit( 0 );
        }
         while  (true) {
             try  {
                 new  ServerTask(ss.accept()).start();
            }  catch  (Exception e) {
                e.printStackTrace();
                System.exit( 0 );
            }
        }
    }

     private   class  ServerTask  implements  Runnable {

         private  Socket s;
         private  Thread self;
		 private  String message;
		
         public  ServerTask(Socket s) {
             this .s = s;
            self =  new  Thread( this );
        }

         public   void  start() {
             this .self.start();
        }

         public   void  run() {
             try  {
                ObjectInputStream ois =  new  ObjectInputStream(s.getInputStream());
                ObjectOutputStream oos =  new  ObjectOutputStream(s.getOutputStream());
				
				message = (String)ois.readObject();
				System.out.println("Client->"+message);
				oos.writeObject(message);                
				
				oos.flush();
                s.close();
				System.out.println("Socket closed");
            }  catch  (Exception e) {
                e.printStackTrace();
                 if  (!s.isClosed()) {
                     try  {
                        s.close();
                    }  catch  (Exception ee) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
...
Рейтинг: 0 / 0
25.04.2007, 18:44:54
    #34487646
Amigo111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
Что-то как-то странно ты делаешь...потоки не закрываешь,а сокет закрываешь,да еще и в try, и в catch
Попробуй закрывать потоки и сокет в блоке finally
...
Рейтинг: 0 / 0
27.04.2007, 15:10:16
    #34493215
MaximGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
Amigo111Что-то как-то странно ты делаешь...потоки не закрываешь,а сокет закрываешь,да еще и в try, и в catch
Попробуй закрывать потоки и сокет в блоке finally

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 public   void  run(){
			 try {
				ObjectInputStream  in  =  new  ObjectInputStream( this .cs.getInputStream());
				ObjectOutputStream out =  new  ObjectOutputStream( this .cs.getOutputStream());				
				 try {				
					System.out.println("Point input");
					 while ( !((msg = ((String)in.readObject())).equals("exit")) ){ 				
						
						System.out.println("Client" + msg);
						out.writeObject(msg);						
						out.flush();
					}
					System.out.println("Point input close");
				} finally {
					out.close();
					in.close();
					 this .cs.close();
				}							
			} catch (Exception e){
				e.printStackTrace();
			}			
		}
...
Рейтинг: 0 / 0
27.04.2007, 15:12:50
    #34493226
MaximGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
Amigo111Что-то как-то странно ты делаешь...потоки не закрываешь,а сокет закрываешь,да еще и в try, и в catch
Попробуй закрывать потоки и сокет в блоке finally
Как сделать что бы сервер постоянно принимал от клиента сообщения и не закрывал сокет???
...
Рейтинг: 0 / 0
27.04.2007, 15:39:34
    #34493351
MaximGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2205)
at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2495)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2505)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1272)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at Server$ClientFlow.run(Server.java:63)
at java.lang.Thread.run(Thread.java:595)

Вылетает екскептион, закрывается сокет закрывается поток.
клиент:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 import  java.net.Socket;
 import  java.net.InetSocketAddress;
 import  java.io.*;


 public   class  Client {

     public   static   void  main(String[] args)  throws  Exception {
		BufferedReader br =  new  BufferedReader( new  InputStreamReader(System.in));
        Socket s =  new  Socket();
        s.connect( new  InetSocketAddress("localhost",  2004 ));
        ObjectOutputStream oos =  new  ObjectOutputStream(s.getOutputStream());
		String qw;
		qw = br.readLine();
        oos.writeObject(qw);
        oos.flush();
        ObjectInputStream ois =  new  ObjectInputStream(s.getInputStream());
        String obj = (String) ois.readObject();
        System.out.println("Server=" + obj);
    }
}

...
Рейтинг: 0 / 0
27.04.2007, 16:27:46
    #34493549
piston
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
а чо в цикле нельзя постоянно опрашивать сокет????? зачем его закрывать
...
Рейтинг: 0 / 0
27.04.2007, 17:43:33
    #34493755
MaximGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
pistonа чо в цикле нельзя постоянно опрашивать сокет????? зачем его закрывать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 do {		
	System.out.println("Point input do");					
	msg = (String)in.readObject();
	System.out.println("Client" + msg);
	out.writeObject(msg);						
	out.flush();
					
} while ( !(msg.equals("exit")) );
я вот так делаю, но вылетает екскепт... надо скорее всего подругому, если не тудно пример кода
...
Рейтинг: 0 / 0
27.04.2007, 19:48:04
    #34494023
MaximGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
народ help хоть ктонибудь я уже sun перелопатил, не пойму как сделать????
...
Рейтинг: 0 / 0
27.04.2007, 20:52:27
    #34494071
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокеты
2 MaximGL

Эх ты, лапоть! А циклы хто будет делать?

Код: 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.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.net.Socket;
 import java.net.ServerSocket;

 public class Server {

     public static void main(String[] args) {
         new Server().start();
     }

     public void start() {
         ServerSocket ss = null;
         try {
             ss = new ServerSocket( 65000 );
         } catch (Exception e) {
             e.printStackTrace();
             System.exit( 0 );
         }
         while (true) {
             try {
                 new ServerTask(ss.accept()).start();
             } catch (Exception e) {
                 e.printStackTrace();
                 System.exit( 0 );
             }
         }
     }

     private class ServerTask implements Runnable {

         private Socket s;
         private Thread self;
         private String message;

         public ServerTask(Socket s) {
             this.s = s;
             self = new Thread(this);
         }

         public void start() {
             this.self.start();
         }

         public void run() {
             try {
                 ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
                 ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
                 while(true){
                    message = (String)ois.readObject();                    
                    System.out.println("Client->"+message);
                    if (message.equals("exit")) break;
                    oos.writeObject(message);
                    oos.flush();
                 }
                 s.close();
                 System.out.println("Socket closed");
             } catch (Exception e) {
                 e.printStackTrace();
                 if (!s.isClosed()) {
                     try {
                         s.close();
                     } catch (Exception ee) {
                         e.printStackTrace();
                     }
                 }
             }
         }
     }
 }



import java.net.Socket;
import java.net.InetSocketAddress;
import java.io.*;

public class Client {

    public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Socket s = new Socket();
        s.connect(new InetSocketAddress("localhost",  65000 ));
        ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
        ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
        String qw;
        while(true){
            qw = br.readLine();
            oos.writeObject(qw);
            //oos.flush();
            if (qw.equals("exit")) break;
            String obj = (String) ois.readObject();
            System.out.println("Server=" + obj);            
        }
        oos.close();
        ois.close();

    }
}


...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сокеты / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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