我想实现以下功能
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
答案 0 :(得分:0)
你应该有条件来打破你的while循环,否则它将永远循环,你的程序将崩溃。这可能是你遇到的问题。
答案 1 :(得分:0)
现在,你有一个无限循环。这与“只要有可用输入就读”不同,因为在输入不再可用后它将继续读取。
尝试这样的事情:
do
{
request = inFromClient.readLine();
if (request != null)
{
// do stuff.
}
} while (request != null);
当输入流中的输入不再可用时,上面的示例将停止读取。
有关java和套接字的信息,请查看Oracle Java Socket Tutorial。 您描述的工作将驻留在服务器上。