从while循环中的套接字读取

时间:2013-11-22 18:01:38

标签: java sockets loops inputstream

我想实现以下功能

while (true)
{
if client sends something 
process it

else wait till something is send }

我尝试了以下但是它没有用,它处理一件事然后停止工作 谁能帮我? 我在这里搜索过这样的案例,但我没有找到任何结果。如果有人能举例说明如何从while循环中的socket读取,我将不胜感激,如上所述。

            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
            DataOutputStream outToclient =new DataOutputStream(client.getOutputStream());
            while (true){
                if ((request=inFromClient.readLine())!=null){


                        System.out.println("ser "+request);         
                        msg1= new msgs();
                        if(msg1.IsListReq(request))
                        {
                               System.out.println("Ser :List req");



                               for (int i = 0; i <listOfFiles.length ; i++) 
                               {

                                    if (listOfFiles[i].isFile()) 
                                     {

                                         files[i] = listOfFiles[i].getName();
                                     }

                               }

                                //prepare the respones
                                msg1.MakeFileListResponse (files);
                                outToclient.writeBytes(msg1.getMsg()+'\n');

                        } // end of processing List Request
                    } // end of first if statement
                 } end of while loop

2 个答案:

答案 0 :(得分:0)

你应该有条件来打破你的while循环,否则它将永远循环,你的程序将崩溃。这可能是你遇到的问题。

答案 1 :(得分:0)

现在,你有一个无限循环。这与“只要有可用输入就读”不同,因为在输入不再可用后它将继续读取。

尝试这样的事情:

do
{
    request = inFromClient.readLine();
    if (request != null)
    {
        // do stuff.
    }
} while (request != null);

当输入流中的输入不再可用时,上面的示例将停止读取。

有关java和套接字的信息,请查看Oracle Java Socket Tutorial。 您描述的工作将驻留在服务器上。