簡體   English   中英

Java BufferedReader讀取表單套接字不返回null

[英]Java BufferedReader reading form socket doesn't return null

我目前正在用Java編寫一個可打開套接字的應用程序,並應通過該套接字接收和發送數據。

據我了解,一旦緩沖區為空,則BufferedReader.readLine()返回null。 但是,我的代碼不會從從BufferedReader讀取行的循環中退出。 我的想法是,我收到歌曲列表,然后將值發送到開始播放歌曲的服務器。

這是代碼:

package me.frankvanbever.MediaServerClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

        public class MediaServerClient {

            /**
             * @param args
             */
            public static void main(String[] args) {

                    Socket server;
                    try {
                        server = new Socket( "10.42.0.41" , 2626 );

                        InputStream in = server.getInputStream();
                        OutputStream out = server.getOutputStream();

                        BufferedReader bin = new BufferedReader( new InputStreamReader( in ) , 4096);

                        String inputline;
                        while( (inputline = bin.readLine()) != null){

                            System.out.println(inputline);

                        }

                        System.out.println("exited loop");
                        out.write('1');
                    } catch (UnknownHostException e) {
                    } catch (IOException e) {
                    }


            }

    }

這是正常行為嗎? 服務器是用python編寫的,我可以更改源代碼。

據我了解,一旦緩沖區為空,則BufferedReader.readLine()返回null。

否。一旦基礎收益被關閉 ,它將返回null 如果您要連接的服務器沒有關閉連接,則BufferedReader會掛起,等待下一行文本。

不要忘記TCP是面向流的(就像BufferedReader )。 除非您將其放入協議中,否則沒有“完整消息”的提示。 這就是協議通常包含消息終止符之類的原因,或者它們在發送消息之前指定消息中有多少數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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