當(dāng)我們向服務(wù)器傳輸數(shù)據(jù)寞酿,并不知道傳輸多少數(shù)據(jù)時(shí)趟妥,我們?nèi)绻?dāng)傳輸數(shù)據(jù)全部完成后,理科關(guān)閉套接字疤坝,那么也就立刻與服務(wù)器斷開了兆解,這個(gè)時(shí)候就無法獲取服務(wù)器的響應(yīng)了
解決辦法:使用半關(guān)閉方法,也就是只關(guān)閉一個(gè)套接字的輸出流來表示發(fā)送給服務(wù)器的請(qǐng)求數(shù)據(jù)已經(jīng)結(jié)束跑揉,但是必須保持輸入流處于打開狀態(tài)
直接看代碼
Socket socket=new Socket(host,port);
Scanner in =new Scanner(socket.getInputStream());//輸入流
PrintWriter writer= new PrintWriter(socket.getOutputStream());//輸出流
writer(...);
writer.flush();
socket.shutdownOutput();//關(guān)閉輸出流
while(in.hasNext()!=null){ //繼續(xù)接受來自服務(wù)器的輸入
String line = in.nextLine();
}
socket.close();//所有結(jié)束才關(guān)閉套接字