2012-09-24 73 views
2

我创建了一个服务,然后创建一个套接字,但只要试图读取从服务器发送的数据,它挂起,另一方面相同的代码运行,如果我不使用服务,但纯活动??Android套接字挂起

 import android.app.*; 
     import android.content.*; 
     import android.os.*; 
     import android.util.*; 
     import java.net.*; 
     import java.io.*; 
     import android.widget.*; 




    public class BackgroundService extends Service 
      { 
        private Socket socket=null; 
        private InputStreamReader in=null; 
        private String ip; 

        private String tag="BackgroundService"; 

        public IBinder onBind(Intent p1) 
        { 
          // TODO: Implement this method 
          return null; 
        } 

      public void onCreate(){ 
        super.onCreate(); 




      } 
      public void onStart(Intent i,int id){ 
      super.onStart(i,id); 
        ip=i.getStringExtra("Ip"); 

      Log.v(tag,"Ip "+i.getStringExtra("Ip")); 
        try 
        { 
          socket = new Socket(ip.trim(), 8888); 
          new Runnable() { 

            public void run() 
            { 
//          Hangs in this block..... 
              try 
              { 
                in = new InputStreamReader (socket.getInputStream()); 
              BufferedReader bf=new BufferedReader (in); 
     //         Never Reaches this messge 
              Log.v(tag,"mess:"+bf.readLine()); 
              } 
              catch (IOException e) 
              { 
                e.printStackTrace(); 
              } 


            } 


          }.run(); 



        } 
        catch (IOException e) 
        { 
          e.printStackTrace(); 
        } 



      } 

      } 
+0

?那么线程是否根本就输入了run方法呢?此外,尝试先打开输出流。 Java中有关于Object ... Streams的问题,但我不确定它是否能解决您的问题。顺便说一句,你为什么使用Runnable但同步调用它?你想使用[Thread](http://developer.android.com/reference/java/lang/Thread.html)吗? –

+0

是的套​​接字连接正常,即使我不使用runable它相同,生病尝试先调用outputstream然后inputstream – Rs9766

+0

终于找出了它在Log.v中的缺陷,使用System.out.println工程 – Rs9766

回答

2

Log.v的问题是它不会允许您打印值,以便使用的System.out.println()和bf.printline将包含难道插座连接正确的消息