簡體   English   中英

從套接字讀取到字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM