在while循环中没有在android中关闭套接字连接

时间:2014-06-17 07:48:41

标签: android sockets button while-loop

我正在开发一个应用程序,我通过套接字连接来获取数据,但是一旦我建立了一个通过按钮点击调用的套接字连接,我可以看到我能够连接并获取数据,但是套接字连接没有终止,应用程序挂起。我已经包含了socket.close();在我的代码中但它不是帮助下面是我的代码片段..

     button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            /// some code which isn't important here

            // establish socket connection to get data

              try{
                     Socket s = new Socket("IP",portnumber);
                     Log.d(TAG, "socket connected");
                     PrintWriter out1 = new PrintWriter(s.getOutputStream(), true);                  
                     BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
                     out1.println(value1);
                     Log.d(TAG, value1);
                     String line="";
                     String msg = "";
                     while ((line=in.readLine()) != "//end of message from server")
                     {                   

                                 msg+=line+"\n";
                                Log.d(TAG, msg);

                     } 
                     out1.close();
                     in.close();
                     s.close();
                     Log.d(TAG, "socket closed " );
                    } 

          catch (IOException e) {
            Log.e(TAG, "file finished " + e.getMessage());
                 }

1 个答案:

答案 0 :(得分:1)

in.readLine();中的hangs。您正在等待服务器发送另一行。但服务器没有。如果服务器关闭,readLine将返回null。但是服务器没有关闭。有几种可能性来解决这个问题。

其余的:您正在为每一行打开并写一个完整的文件。最好在while循环之后执行一次。