亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

讀取和響應合起來出錯了

服務器從客戶端讀取用戶名,密碼。沒問題

服務器響應客戶端,發送“歡迎您”。沒問題

但讀取用戶名和密碼之后響應“歡迎您”就會報錯????。?!

為什么各自執行沒問題合起來就出錯了呢?(代碼和老師的一樣

正在回答

4 回答

這么跟你說吧,你代碼肯定跟老師不一樣,我想應該是你的關閉socket輸入輸出流的順序有問題。

截圖跟你看:服務器端,這三步要依次來,這是有原因的

http://img1.sycdn.imooc.com//573e7f8e0001021808350671.jpg

客戶端:對應的順序也不能顛倒,你做到了這些,包你沒問題,妥妥的

http://img1.sycdn.imooc.com//573e80010001a38807850674.jpg

0 回復 有任何疑惑可以回復我~
#1

Helios_ 提問者

非常感謝!
2016-05-22 回復 有任何疑惑可以回復我~

源碼給你

客戶端:

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();
		}

	}

}


0 回復 有任何疑惑可以回復我~

代碼都不給 怎么給你答案

0 回復 有任何疑惑可以回復我~

服務器從客戶端讀取用戶名,密碼。沒問題

服務器響應客戶端,發送“歡迎您”。沒問題

沒看懂,從這兩句話得出服務器可以讀取客戶端數據;客戶端可以讀取服務器數據。

0 回復 有任何疑惑可以回復我~
#1

Helios_ 提問者

服務器讀取客戶端數據、服務器向客戶端發送數據。這兩個功能分開執行沒問題,但將代碼放到一起之后就出錯(兩個功能不能同時實現
2016-04-25 回復 有任何疑惑可以回復我~
#2

菜鳥555 回復 Helios_ 提問者

給全部代碼看看。
2016-04-27 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

讀取和響應合起來出錯了

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號