課程
/后端開發
/Java
/Java Socket應用---通信是這樣練成的
服務器從客戶端讀取用戶名,密碼。沒問題
服務器響應客戶端,發送“歡迎您”。沒問題
但讀取用戶名和密碼之后響應“歡迎您”就會報錯????。?!
為什么各自執行沒問題合起來就出錯了呢?(代碼和老師的一樣
2016-04-25
源自:Java Socket應用---通信是這樣練成的 3-4
正在回答
這么跟你說吧,你代碼肯定跟老師不一樣,我想應該是你的關閉socket輸入輸出流的順序有問題。
截圖跟你看:服務器端,這三步要依次來,這是有原因的
客戶端:對應的順序也不能顛倒,你做到了這些,包你沒問題,妥妥的
Helios_ 提問者
源碼給你
客戶端:
package?com.imooc.ServerAndClient; import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStream; import?java.io.InputStreamReader; import?java.io.OutputStream; import?java.io.PrintWriter; import?java.net.Socket; import?java.net.UnknownHostException; public?class?Client?{ public?static?void?main(String[]?args)?throws?UnknownHostException?{ try?{ //?創建socket,指定服務器端的ip地址和端口 Socket?socket?=?new?Socket("localhost",?6666); //?獲取輸出流,向服務器端發送信息 OutputStream?outputStream?=?socket.getOutputStream(); //?將輸出流轉換成打印流 PrintWriter?pw?=?new?PrintWriter(outputStream); pw.print("用戶名:root;密碼:123"); pw.flush(); //?關閉socke流 socket.shutdownOutput(); ????????????//?開始讀取客戶端信息 InputStream?inputStream?=?socket.getInputStream(); InputStreamReader?inputStreamReader?=?new?InputStreamReader(inputStream); BufferedReader?bufferedReader?=?new?BufferedReader(inputStreamReader); String?info?=?null; while?((info?=?bufferedReader.readLine())?!=?null)?{ System.out.println("客戶端接受服務器端信息:"?+?info); } //?關閉socke流 socket.shutdownInput(); //關閉其他資源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); pw.close(); outputStream.close(); socket.close(); ? }?catch?(IOException?e)?{ e.printStackTrace(); } } }
服務器端:
package?com.imooc.ServerAndClient; import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStream; import?java.io.InputStreamReader; import?java.io.OutputStream; import?java.io.PrintWriter; import?java.net.ServerSocket; import?java.net.Socket; /** ?*?實現基于TCP協議的Socket通信--Server服務端 ?*? ?*?@author?ykp ?*? ?*/ public?class?Server?{ public?static?void?main(String[]?args)?{ try?{ //?創建一個服務器端的Socket實例 ServerSocket?serverSocket?=?new?ServerSocket(6666); System.out.println("服務器即將啟動,等待客戶端連接...."); //?調用accept()方法監聽端口,等待客戶端的連接 Socket?socket?=?serverSocket.accept(); //?獲取輸入流,讀取客戶端信息 InputStream?inputStream?=?socket.getInputStream(); //?將字節流轉換成字符流 InputStreamReader?inputStreamReader?=?new?InputStreamReader( inputStream); //?給字符輸入流添加緩沖 BufferedReader?bufferedReader?=?new?BufferedReader( inputStreamReader); String?info?=?null; while?((info?=?bufferedReader.readLine())?!=?null)?{ System.out.println("服務器接受客戶端信息:"?+?info); } //?關閉socket輸出流和socket輸入流 socket.shutdownInput(); //?服務器向客戶端發送信息 OutputStream?outputStream?=?socket.getOutputStream(); PrintWriter?pw?=?new?PrintWriter(outputStream); pw.print("歡迎你!"); pw.flush(); //?關閉socket輸出流和socket輸入流 socket.shutdownOutput(); //?關閉其他資源 pw.close(); outputStream.close(); bufferedReader.close(); inputStreamReader.close(); inputStream.close(); //關閉socket socket.close(); serverSocket.close(); }?catch?(IOException?e)?{ e.printStackTrace(); } } }
代碼都不給 怎么給你答案
沒看懂,從這兩句話得出服務器可以讀取客戶端數據;客戶端可以讀取服務器數據。
菜鳥555 回復 Helios_ 提問者
舉報
分享的是 Java 中的網絡編程,使用Socket實現網絡聊天通信
2 回答客戶端發送請求后關閉輸出流,但讀取服務器響應時為什么不關閉輸入流?
2 回答關于響應信息
2 回答服務器端響應客戶的報了差
2 回答響應的時候的服務端
1 回答while循環讀取信息的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-05-20
這么跟你說吧,你代碼肯定跟老師不一樣,我想應該是你的關閉socket輸入輸出流的順序有問題。
截圖跟你看:服務器端,這三步要依次來,這是有原因的
客戶端:對應的順序也不能顛倒,你做到了這些,包你沒問題,妥妥的
2016-05-20
源碼給你
客戶端:
服務器端:
2016-04-26
代碼都不給 怎么給你答案
2016-04-25
服務器從客戶端讀取用戶名,密碼。沒問題
服務器響應客戶端,發送“歡迎您”。沒問題
沒看懂,從這兩句話得出服務器可以讀取客戶端數據;客戶端可以讀取服務器數據。