[英]Reading from Socket to String
我正在嘗試從Socket的InputStream讀取一個String變量,然后打印它。 但是,以某種方式,這不能正常工作。 receivedText
僅印刷當客戶端斷開到控制台。 我的代碼有什么問題?
public xClient(Socket socket)
{
Thread receiver = new Thread(){
public void run()
{
String receivedText = "";
while(socket.isConnected())
{
try {
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = input.readLine()) != null)
{
receivedText += line;
}
if(!receivedText.equals(""))
{
System.out.println(receivedText);
receivedText = "";
}
Thread.sleep(10);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
receiver.start();
}
主要方法:
ServerSocket socket = new ServerSocket();
socket.bind(new InetSocketAddress("127.0.0.1",9200));
Thread accepting = new Thread(){
public void run()
{
while(true)
{
try {
Socket received = socket.accept();
new xClient(received);
System.out.println("OK");
Thread.sleep(10);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
accepting.start();
在下面的代碼中..
while((line = input.readLine()) != null)
{
receivedText += line;
}
readLine()函數將等待,直到獲得輸入行或流結束的指示。 您正在循環中對照null進行檢查。 僅當流結束或客戶端斷開連接時,它才會回復null。 客戶端應在斷開連接(或執行其他操作)之前回復/寫入最后一條消息,通知文件結束。
當對等方斷開連接時,readLine()方法僅返回null。 如果要打印每一行,請在讀取循環內執行。
還有其他問題:
“ while socket.isConnected()”測試毫無意義。 它已連接,它將保持連接狀態。 當對等方斷開連接時,連接不會神奇地變為假。 閱讀時,您已經在測試流的結尾。 您不需要圍繞它的另一個循環。
每次在該外部循環周圍創建一個新的BufferedReader都將無法進行:這只會導致數據丟失
讀取和接受循環中的睡眠也完全沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.