package?huangfeng.TongXin;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.net.ServerSocket;
import?java.net.Socket;
/*
?*?基于TCP協議的Socket通信,實現用戶登錄
?*?服務器端
?*/
public?class?Server?{
public?static?void?main(String[]?args)?{
try?{
//創建一個Socket服務器端,即ServerSocket,指定綁定端口,并監聽此端口
//創建ServerSocket的實例
ServerSocket?serverSocket?=?new?ServerSocket(9999);
System.out.println("******服務器即將啟動,等待客戶端的連接******");
//調用accept()方法開始監聽,等待服務器的連接
Socket?socket?=?serverSocket.accept();
//獲取輸入流,并讀取客戶端信息
InputStream?is?=?socket.getInputStream();//字節輸入流
//把字節輸入流包裝為字符輸入流
InputStreamReader?isr?=?new?InputStreamReader(is);
//加載緩沖
BufferedReader?br?=?new?BufferedReader(isr);
String?info?=?null;
//獲取客戶端信息
while((info?=?br.readLine())!=null){
System.out.println("我是服務器,客戶端說:"+info);
//關閉輸入流
socket.shutdownInput();
//關閉相關資源
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
}
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}package?huangfeng.TongXin;
import?java.io.IOException;
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)?{
try?{
//創建客戶端socket。指定服務器的地址和端口
Socket?socket?=?new?Socket("localhost",?9999);
//獲取輸出流,向服務器端發送信息
OutputStream?os?=?socket.getOutputStream();//字節輸出流
//將輸出流包裝為打印流
PrintWriter?pw?=?new?PrintWriter(os);
pw.write("用戶名:huangfeng?;?密碼:8888");
pw.flush();
socket.shutdownOutput();//關閉輸出流
//關閉相關資源
pw.close();
os.close();
socket.close();
}?catch?(UnknownHostException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}******服務器即將啟動,等待客戶端的連接******我是服務器,客戶端說:用戶名:huangfeng ; 密碼:8888java.io.IOException: Stream closed at java.io.BufferedReader.ensureOpen(BufferedReader.java:115) at java.io.BufferedReader.readLine(BufferedReader.java:310) at java.io.BufferedReader.readLine(BufferedReader.java:382) at huangfeng.TongXin.Server.main(Server.java:31)
3 回答

ziom
TA貢獻948條經驗 獲得超1109個贊
在讀取BufferedReader的時候不能把它關了
//獲取客戶端信息???????????? while((info?=?br.readLine())!=null){ ????System.out.println("我是服務器,客戶端說:"+info); ????//關閉輸入流 ????socket.shutdownInput(); ????//關閉相關資源 ????//?br.close();?把這行注釋了再試試 ????isr.close(); ????is.close(); ????socket.close(); ????serverSocket.close(); }

lindajia
TA貢獻3條經驗 獲得超1個贊
?//獲取客戶端信息
????????????while((info?=?br.readLine())!=null){
????????????????System.out.println("我是服務器,客戶端說:"+info);
? ? ? ? ? ? ? ?}//大括號在這里 表示循環讀出數據完了后,再進行后面的關閉輸入流資源操作
????????????????//關閉輸入流
????????????????socket.shutdownInput();
????????????????//關閉相關資源
????????????????br.close();
????????????????isr.close();
????????????????is.close();
????????????????socket.close();
????????????????serverSocket.close();
????????????}
?????????????
添加回答
舉報
0/150
提交
取消