socket中輸入輸出流問題
在我編程中遇到了一個問題,就是客戶端如果不關閉輸入流的話,服務端與客戶端之間的通訊就會卡住,只要一調用socket。shutdownInput關閉輸入流就正常
客戶端代碼
public static void main(String[] args) {
try {
//1.創建socket對象,指明需要連接的服務器的地址和端口號
Socket clientSocket=new Socket("localhost", 8811);
//2.連接建立后,通過輸出流向服務器端發送請求消息
OutputStream os=clientSocket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("用戶名 : admin 密碼 :123");
pw.flush();
System.out.println("發送成功");
clientSocket.shutdownOutput();//只要把這行給注釋了,通訊就會卡住
//3.通過輸入流獲取服務器的響應信息
InputStream is=clientSocket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String serverSay=br.readLine();
System.out.println("這里是客戶端? ,服務端說 : "+serverSay);
//4.關閉資源
clientSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
求大神解答一下原因
2018-08-18
找到原因來了,問題在于服務器端是用來BufferedReader的readLine函數,這個函數只用在讀到換行符的時候才會結束,不然會一直是阻塞的狀態。而我這里發送的時候沒有加上換行符就會產生阻塞的現象,而我關閉了輸出流,就等與強制結束了readLIne函數的進程,所以也能解決問題。