【问题标题】:Reading from a socket in a while loop在 while 循环中从套接字读取
【发布时间】:2013-11-22 18:01:38
【问题描述】:

我想实现以下功能

while (true)
{
if client sends something 
process it

else wait till something is send }

我尝试了以下方法,但没有成功,它处理一件事然后停止工作 谁能帮我? 我在这里搜索过这样的案例,但没有找到任何东西。如果有人能给出一个例子,说明如何从上面的描述中的 while 循环中读取套接字,我将不胜感激。

            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

【问题讨论】:

  • 请应用正确的格式!
  • 我不确定你的花括号在哪里闭合
  • 请将您的问题改写为Short, Self Contained, Correct (Compilable), Example。我们无法编译这个。另外,请重新缩进,以便我们阅读。
  • 很抱歉,我现在就编辑它

标签: java sockets loops inputstream


【解决方案1】:

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

【讨论】:

  • 但我希望它运行,只要有来自服务器的输入
【解决方案2】:

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

试试这样的:

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

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

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

【讨论】:

  • 我不知道输入何时可用或可用多少次,我该如何解决?
  • 为此,您需要阅读 java 套接字教程。基本上你会监听一个套接字并在收到消息时做出反应。
  • 你能给我一个这样的教程的链接吗?老实说,我不知道在谷歌上输入什么来获得这个教程。我以前在 C 中做过套接字编程,但我不知道如何用 java 来做
猜你喜欢
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多