Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / перехватить отключение клиента / 3 сообщений из 3, страница 1 из 1
05.12.2012, 16:59:18
    #38066627
Николай Ced.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перехватить отключение клиента
Есть такая проблема. Сокет сервера слушает клиентов. Клиент отлючается. А сервер его все равно слушает. Как поймать отлючение клиента. isConnected() - не предлагать). Пинг реализовать возможности нет. Клиент не мой. Если кто нибудь сталкивался - прошу поделиться.
...
Рейтинг: 0 / 0
05.12.2012, 17:30:27
    #38066693
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перехватить отключение клиента
Николай Ced.,

Сервер слушает порт, а не клиента. С клиентом он может вести диалог и все.
Если клиент отключился, а сервер диалог с ним не ведет,т.е. не читает и не пишет, то никогда не узнает об этом)))
Если они разделены файрволом, то при чтении данных от клиента тоже не узнает об этом до истечение таймаута.
Заключение - хреновый протокол (диалог) обмена данными.
...
Рейтинг: 0 / 0
05.12.2012, 18:10:51
    #38066782
Николай Ced.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перехватить отключение клиента
am_sasa,

под "сервер слушает" имелось ввиду ServerSocket.accept().
насчет полохй или хороший протокол обмена данными - вопрос не в протоколе.а в возможности перехватывать отключение клиента
вот пожалуйста пример классов , подключайтесь Telnet клиентом по 5555 порту.


Код: java
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.
package test;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
	public static void main(String[] a)
	{
		
		try {
			ServerSocket srv=new ServerSocket(5555);
			while(true)
			{
				Socket s=srv.accept();
				new SRVSocket(s);
				
			}
			
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}



package test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;

public class SRVSocket extends Thread {
	
	BufferedInputStream bin;
	BufferedOutputStream bout;
	Socket sc;
	public SRVSocket(Socket sc)
	{
		this.sc=sc;
		try {
			this.bin=new BufferedInputStream(sc.getInputStream());
			this.bout=new BufferedOutputStream(sc.getOutputStream());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.start();
	}
  public void run()
  {
	  try{
	  while(true)
	  {
		 // System.out.println(" "+this.sc.isConnected());
		  
		  if(bin.available()>0)
		  {
			  byte[] f=new byte[bin.available()];
			  bin.read(f);
			  System.out.println(new String(f)+" "+this.sc.isConnected());
			  bout.write(f);
			  bout.flush();
		  }
		   
		  
	  }
	  }catch(Exception ex){System.out.println(ex.toString());}
	  
	  
  }
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / перехватить отключение клиента / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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