求大神帶飛,客戶端向服務端發送信息成功,卻收不到響應,怎么回事?
package com.tcp;
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;
public class Server {
/**
* 服務器端
*?
*/
public static void main(String[] args) {
int port = 8818;
try {
// 1.創建ServerSocket實例
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("***服務器即將啟動,正在等待客戶機連接***");
// 調用accept()方法接收來自客戶機的Socket
Socket clintSocket = serverSocket.accept();
// 2.創建字節輸入流
InputStream is = clintSocket.getInputStream();
// 創建字符輸入流
InputStreamReader isr = new InputStreamReader(is);
// 給字符輸入流創建緩沖
BufferedReader br = new BufferedReader(isr);
String date = null;
// 3.當讀取數據不為空時,循環讀取
while ((date = br.readLine()) != null) {
System.out.println("我是服務端,客戶端連接成功!");
System.out.println("接收到登陸請求,驗證信息如下:");
System.out.println(date);
}
// 4.返回給客戶端反饋信息
OutputStream os = clintSocket.getOutputStream();
// 將輸出流包裝為打印流
PrintWriter pw = new PrintWriter(os);
pw.write("歡迎您,在渣男路上越走越遠,登陸成功");
pw.flush();
// 5.關閉所有資源
//clintSocket.shutdownOutput();
pw.close();
os.close();
clintSocket.shutdownInput();// 關閉輸入流
br.close();
isr.close();
is.close();
clintSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.tcp;
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.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;
public class Clint {
/**
* 客戶端
*?
*/
public static void main(String[] args) {
String sss="用戶名:在渣男路上越走越遠? ?密碼:123456";
try {
//1.創建客戶端Socket
Socket socket = new Socket("localhost", 8818);
//2.創建輸出流
OutputStream os=socket.getOutputStream();
//將輸出流包裝為打印流
PrintWriter pw=new PrintWriter(os);
//3.調用writer()方法寫入內容
pw.write("用戶名:在渣男路上越走越遠? ?密碼:123456");
pw.flush();
System.out.println("******登陸界面******");
System.out.println(sss);
System.out.println("正在請求登陸......");
//4.接收來自服務器的反饋信息
InputStream is=socket.getInputStream();
//創建字符輸入流
InputStreamReader isr=new InputStreamReader(is);
//給字符輸入流創建緩沖
BufferedReader br =new BufferedReader(isr);
String date1 = null;
//當讀取數據不為空時,循環讀取
while ((date1 = br.readLine()) != null) {
System.out.println(date1);
}
//5.關閉資源
//socket.shutdownInput();//關閉輸入流
br.close();
isr.close();
is.close();
socket.shutdownOutput();
pw.close();
os.close();
//socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2019-05-12
你應該在客戶端進行輸出流完成之后就應該socket.shutdownOutput();而不是在最后才執行