第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

關(guān)于socket.socket.shutdownOutput()方法

關(guān)于socket.socket.shutdownOutput()方法

sunny颯楓 2016-08-13 18:59:08
程序一;客戶(hù)端public class client2 { public static void main(String argv[]) throws UnknownHostException, IOException{ String str[]={"4","5","6"}; Socket socket=new Socket("localhost",8080); DataInputStream input=new DataInputStream(socket.getInputStream()); DataOutputStream output=new DataOutputStream(socket.getOutputStream()); for(String str1:str){ output.writeUTF(str1); String yourStr=input.readUTF(); System.out.println(yourStr); } socket.close(); }}服務(wù)器端public class Server2 { @SuppressWarnings("Deprecated") public static void main(String argv[]) throws UnknownHostException, IOException{ String str[]={"1","2","3"}; ServerSocket server=new ServerSocket(8080); Socket socket=server.accept(); System.out.println("succeed"); DataInputStream input=new DataInputStream(socket.getInputStream()); DataOutputStream output=new DataOutputStream(socket.getOutputStream()); for(String str1:str){ String yourStr=input.readUTF(); System.out.println(yourStr); output.writeUTF(str1); } socket.close(); server.close(); }}這里并沒(méi)有使用socket.shutdownOutput();程序正常運(yùn)行程序二服務(wù)器端;public class Server { public static void main(String argv[]) throws IOException{ ServerSocket serverSocket=new ServerSocket(8888); System.out.println("succeed,wait client connects"); Socket socket=serverSocket.accept(); InputStream is=socket.getInputStream(); InputStreamReader isr=new InputStreamReader(is); BufferedReader reader=new BufferedReader(isr); String info=null; while((info=reader.readLine())!=null){ System.out.println("我是服務(wù)器,客戶(hù)端說(shuō)"+info);} socket.shutdownInput(); OutputStream out=socket.getOutputStream(); PrintWriter writer=new PrintWriter(out); writer.write("welcome!"); writer.flush(); socket.close(); serverSocket.close(); }}客戶(hù)端;public class Client { public static void main(String[]argv) throws UnknownHostException, IOException{ Socket socket=new Socket("localhost",8888); OutputStream stream=socket.getOutputStream(); PrintWriter writer=new PrintWriter(stream); writer.println("用戶(hù)名:我;密碼:19"); writer.flush();// 此處 socket.shutdownOutput(); InputStream st=socket.getInputStream(); InputStreamReader read=new InputStreamReader(st); BufferedReader bu=new BufferedReader(read); String info=null; while((info=bu.readLine())!=null){ System.out.println(info); } socket.close(); }}這里如果去掉客戶(hù)端的?socket.shutdownOutput();程序?qū)⒉荒苓\(yùn)行我不是很明白,請(qǐng)問(wèn)有誰(shuí)知道這是為什么嗎?
查看完整描述

1 回答

已采納
?
摩訶迦葉

TA貢獻(xiàn)146條經(jīng)驗(yàn) 獲得超54個(gè)贊

這個(gè)問(wèn)題問(wèn)的好,其實(shí)這是因?yàn)樵赟erver阻塞了。

首先你要了解這兩個(gè)方法是做什么用的。

調(diào)用Socket.shutdownInput( )后, 禁用此套接字的輸入流,發(fā)送到套接字的輸入流端的任何數(shù)據(jù)都將被確認(rèn)然后被靜默丟棄。任何想從該套接字的輸入流讀取數(shù)據(jù)的操作都將返回-1;

?? 調(diào)用Socket.shutdownOutput()后,禁用此套接字的輸出流,對(duì)于 TCP 套接字,任何以前寫(xiě)入的數(shù)據(jù)都將被發(fā)送,并且后跟 TCP 的正常連接終止序列(即-1),之后,從另一端TCP套接字的輸入流中讀取數(shù)據(jù)時(shí),如果到達(dá)輸入流末尾而不再有數(shù)據(jù)可用,則返回 -1。

就是說(shuō)你沒(méi)有調(diào)用shutdownOutput時(shí),相當(dāng)于沒(méi)有跟服務(wù)器說(shuō)“我已經(jīng)說(shuō)完啦,你可以說(shuō)了”。那么服務(wù)器呢就覺(jué)得“哦,客戶(hù)端還沒(méi)說(shuō)完,我要等它說(shuō)完,要有禮貌”然后服務(wù)器就一直等,就阻塞了。他就不會(huì)給客戶(hù)端發(fā)送消息“welcome”。


查看完整回答
4 反對(duì) 回復(fù) 2016-08-13
  • sunny颯楓
    sunny颯楓
    嗯,謝謝,我明白兩個(gè)方法的作用了。 可是我還有兩個(gè)疑問(wèn) 1。就是為什么我的第一個(gè)程序沒(méi)有這個(gè)方法,還是能運(yùn)行呢? 2。禁用套接字的流,意思就是后面不能輸入、輸出了嗎?那么有方法可以重新打開(kāi)這個(gè)流嗎?
  • 摩訶迦葉
    摩訶迦葉
    while((info=reader.readLine())!=null){ System.out.println("我是服務(wù)器,客戶(hù)端說(shuō)"+info);} 在這里,客戶(hù)端做了一次寫(xiě)操作,服務(wù)器做了一次讀操作,然后輸出一次信息。 然后循環(huán)一次,服務(wù)器做第二次讀操作,結(jié)果客戶(hù)端沒(méi)去寫(xiě),它讀不到了,有沒(méi)有Socket.shutdownInput( ),他就一直等客戶(hù)端進(jìn)行寫(xiě)操作,就阻塞了。 for(String str1:str){ String yourStr=input.readUTF(); System.out.println(yourStr); output.writeUTF(str1); } 而在這里,客戶(hù)端進(jìn)行了3次寫(xiě)操作,服務(wù)器讀了3次,都滿(mǎn)足了。 也沒(méi)讓服務(wù)器去讀第四次,當(dāng)然就不會(huì)阻塞了。
  • 摩訶迦葉
    摩訶迦葉
    禁用此套接字的輸入流,還可以輸出。禁用此套接字的輸出流,還可以輸入。 對(duì)一個(gè)socket關(guān)閉就不能重新打開(kāi)了
點(diǎn)擊展開(kāi)后面4
  • 1 回答
  • 1 關(guān)注
  • 11182 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)