我在MainActivity里面开启了一个线程监听连接,客户端使用  PC机,通过WIFI相连1、希望这个线程accept连接后,将这个socket传递给一个新的Activity,在新的Activity里面再开一个线程接收数据,但是貌似Bundle支持的数据类型里面没有socket啊,刚接触ANDROID开发,基础不牢
2、在线程里面://A模块连接处理线程
    private void startServerA() throws IOException
    {
         ServerSocketA.Listen(9220);
         ModuleAConnected=1;
while(ServerSocketA.socket.isConnected()==true)
         {
;
}
ModuleAConnected=0;
    }
但是如果在这个函数里面加上对界面操作的语句,例如
TextView.setText("msg");程序立马挂掉,这是为什么?

3、用VB的Winsock控件   winsock.SendData  "Hello"  如何在Android上解析?书上的例子解析不出来。

解决方案 »

  1.   

    1。为什么要传递socket,线程可以独立于activity的,会为什么要设计成在Activity里呢,java有这么多的设计模式呢。
    2。线程不能直接操作UI
    3。正常的java socket接收就行
      

  2.   

    谢谢回答,原本是打算每个新的Activity对应一个子模块,接收每个子系统传利用socket来的信息,实时显示结果,如果用Hander的话是不是可以不传递socket直接刷新新开启的Activity界面?
      

  3.   

    单独开的线程如下://A模块连接处理线程
    private void startServerA() throws IOException, InterruptedException
        {
    //ServerSocketA.Listen(9220);
    ServerSocket server=new ServerSocket(9220);
    Socket socket=server.accept();
    //连接成功继续执行
    ModuleAConnected=1;
    Message message = new Message();
            message.what = MainFrame.CONNECT_A;
            MainFrame.this.myHandler.sendMessage(message); 
            
    while(socket.isClosed()==false)
    {
    //ServerSocketA.GetData(ReceivebufferA);
    InputStream in=socket.getInputStream();
    //InputStream in=ServerSocketA.socket.getInputStream();
    ReceivebufferA=new byte[in.available()];
    in.read(ReceivebufferA);

    Message messageData= new Message();
    messageData.what = MainFrame.GETDATA_A;
            MainFrame.this.myHandler.sendMessage(messageData);
            Thread.sleep(100);
    }
    ModuleAConnected=0;
    Message messageClose = new Message();
    messageClose.what = MainFrame.CLOSED_A;
            MainFrame.this.myHandler.sendMessage(messageClose);
        }
    Hander处理:Handler myHandler = new Handler() 
        {  
            public void handleMessage(Message msg)
            {   
                   switch (msg.what)
                   {   
                         case MainFrame.CONNECT_A:   
                         {
                          ButtonConnectA.setText("连接成功");
                             break;
                         }
                         case MainFrame.CLOSED_A:   
                         {
                          ButtonConnectA.setText("等待连接中");
                          ButtonConnectA.setEnabled(true);
                             break;
                         }
                         case MainFrame.GETDATA_A:   
                         {
                          String msg1 =new String(ReceivebufferA);
                          Toast tA=Toast.makeText(getApplicationContext(),msg1, Time);
                      tA.show();
                          ButtonConnectA.setText(msg1);
                             break;
                         }
                    }
                   super.handleMessage(msg);
            }
        }; 在PC机上使用VB的winsock控件
    1、winsock.SendData "hello"   为什么接收不到?
    2、怎么才能判断连接连接是否断开?
    3、为什么accept()应该只是执行了一次,而
    winsock.connect方法可以在断开后还能再连接成功?
      

  4.   

    1.首先消息有没有发过来,是接收不对还是没发过来
    2.人为断开把socket也释放吧,如果要检测网络是否连接正常,加上心跳
    3.关键你socket有没有close,如果没有close,那么连接通道还是存在。
      

  5.   


    while(socket.isClosed()==false)
            {
                //ServerSocketA.GetData(ReceivebufferA);
                InputStream in=socket.getInputStream();
                //InputStream in=ServerSocketA.socket.getInputStream();
                ReceivebufferA=new byte[in.available()];
                in.read(ReceivebufferA);
                Message messageData= new Message();
                messageData.what = MainFrame.GETDATA_A;
                MainFrame.this.myHandler.sendMessage(messageData);
                Thread.sleep(100);这里接受数据会阻塞吗?为什么没有接收到数据还是一遍一遍的执行?
      

  6.   

    in.read(ReceivebufferA);
    是不是接收到数据才会继续执行?