2011-10-29 15 views
6

Java'daki Yuvalar aracılığıyla bir POP sunucusundan gelen yanıtı okuyan şu koda sahibim. Ancak, bazen sunucudan okumak için readLine() işlevini kullandığımda ve sunucunun herhangi bir yanıtla yanıt vermemesi durumunda, uygulama sunucumdan yanıt beklerken orada asılı duracak.readLine() için bir zaman aşımı sınırı belirleme?

socket.connect(new InetSocketAddress("pop.server.com", 110), 3000); 
input = socket.getInputStream(); 
BufferedReader incoming = new BufferedReader(new InputStreamReader(input)); 
incoming.readLine(); //This line will cause my application to hang if the server does not respond with a reply 

bir zaman aşımı veya sunucu belli bir süre sonra cevap vermediğinde, uygulama yanıt beklerken durdurmak ve diğer yürütülmesine devam etmesi gerektiğini diğer bazı yollar ayarlamak için bir yolu var mı?

cevap

4

sana rağmen bütün çizgi okumaya zaman aşımı yok Socket.setSoTime(timeout)

+2

Bu denemenizi öneririz. İstemci bayt göndermeye devam ederse, ama asla çizgiyi bitirmezse ne olur? – grom

+0

@grom Bu bir risktir. İstemci size her zaman bellek yetersizliğine neden olan sonsuz veri gönderebilir. Özel işlemeye ihtiyacınız varsa, kodu kendiniz yazmanız gerekir. –

+0

@grom Read() işlevini kendi devrenizde kullanabilirsiniz. Bu yöntem sadece bir karakteri okur. Eğer zaman aşımı ile birleştirirsen, istediğini yapabilmelisin. Tam olarak "kodu kendiniz yaz" gibi değil :) –