2010-10-18 11 views
22
Java API olarak

, yukarıdaki koddaSoketin giriş akışını kapatmak da soket bağlantısını kapatır mı? İstemci alışkanlık "soket bağlantısı hala" iletisi - Ben inputStream fromSocket kapattıktan sonra

 

Socket socket = serverSocket.accept(); 
BufferedReader fromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
PrintWriter toSocket = new PrintWriter(socket.getOutputStream()); 
//do sth with fromSocket ... and close it 
fromSocket.close(); 
//then write to socket again 
toSocket.print("is socket connection still available?\r\n"); 
//close socket 
socket.close(); 
 

, soket bağlantısı artık mevcut değil gibi görünüyor . Bu, bir soketin giriş akışının kapanmasının da soketin kendisini kapattığı anlamına mı geliyor?

+0

Hayır gönderebileceğiniz, bu sunucu tarafında herhangi bir istisna etmez. Görünüşe göre, toSocket çıkış nesnesi hala sunucu tarafında çalışır, ancak istemci tarafında bağlantı kapatılır. – dolaameng

cevap

35

Evet, giriş akışını kapatmak soketi kapatır. Sen close just the input stream için, soket üzerinde shutdownInput yöntemi kullanmak gerekir:

//do sth with fromSocket ... and close it 
socket.shutdownInput(); 

Sonra, yine çıkış soketi

//then write to socket again 
toSocket.print("is socket connection still available?\r\n"); 
//close socket 
socket.close(); 
+3

Hayır, tek yönlü bir kapatma yapar, soketin giriş yarısını kapatır (böylece daha fazla veri alamazsınız), ama yine de mesajınızı çıkış yarısına göndermenizi sağlar, ki bu sizin sorduğunuz şeyin ne olduğunu düşündüğümdür. Nihayetinde soket üzerinde close() çağırdığınızda, çıkış tarafı da kapanır. –

+1

Evet, giriş akışını kapatmak soketi kapatır. Çıkış akışından çıkar. Tabii ki, kapatmanız gereken şey her zaman çıktı akışıdır, bu yüzden kızarır. – EJP

+0

Hayır, yeniden açılamaz. –

İlgili konular