2013-05-28 5 views
0

Я посылаю строку из андроида на C# и от C# для андроид он работает на тренажере, но does't работы на реальном устройстве Androidотправить строку с андроида на C# с использованием сокета

Мой телефон с помощью Android 2.3

вот мой код на Android:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    hienthi_lv_tab2 = (ListView) findViewById(R.id.lvhienthi); 

    chuoi = (EditText) findViewById(R.id.string); 
    ipserver = (EditText) findViewById(R.id.ipserver); 

    txt = (TextView) findViewById(R.id.Show); 

    quit = (Button) findViewById(R.id.quit); 
    connect = (Button) findViewById(R.id.Connect); 
    send = (Button) findViewById(R.id.Send); 

    quit.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      finish(); 
     } 
    }); 

    send.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      OUT_message = chuoi.getText().toString(); 


      new Thread(new Runnable() { 


       final Handler handler = new Handler(); 

       final Runnable updateUI2 = new Runnable() { 

        public void run() { 
         // TODO Auto-generated method stub 
         OUT_message = "Android: " + OUT_message; 
         add_chuoi(OUT_message); 

        } 
       }; 

       public void run() { 
        // TODO Auto-generated method stub 

        PrintWriter out; 
        try { 
         out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())), true); 
         out.println(OUT_message); 
         out.flush(); 

         handler.post(updateUI2); 

         out.close(); 


        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 

      Thread C_thread = new Thread(new ClientThread()); 
      C_thread.start(); 
} 
    }); 

    connect.setVisibility(1); 
    connect.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      // TODO Auto-generated method stub 
      connect.setVisibility(v.GONE); 
      Thread C_thread = new Thread(new ClientThread()); 
      C_thread.start(); 
     } 
    }); 

} 
     public class ClientThread implements Runnable { 

    final Handler handler = new Handler(); 

    final Runnable updateUI = new Runnable() { 

     public void run() { 
      // TODO Auto-generated method stub 
      txt.setText(IN_message); 
      IN_message = "Server: " + IN_message; 
      add_chuoi(IN_message); 
     } 
    }; 

    public void run() { 
     // TODO Auto-generated method stub 

     try { 

      IP = ipserver.getText().toString(); 
      serverAddr = InetAddress.getByName(IP); 
      state_connnect = true; 

      Scanner in; 

      while (state_connnect) { 

       s = new Socket(serverAddr, 4444); 

       in = new Scanner(s.getInputStream()); 
       IN_message = in.nextLine(); 


       handler.post(updateUI); 

       in.close(); 
       s.close(); 

      } 

     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 
public void add_chuoi(String chuoi) { 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array_operator); 
    array_operator.add(chuoi); 
    hienthi_lv_tab2.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 

}

вот мой код на C#:

private void Form1_Load(object sender, EventArgs e) 
    { 
     CheckForIllegalCrossThreadCalls = false; 
     String hostname = ""; 
     System.Net.IPHostEntry ip = new IPHostEntry(); 
     hostname = System.Net.Dns.GetHostName(); 
     ip = System.Net.Dns.GetHostByName(hostname); 

     lblhostname.Text = "Tên Server : " + ip.HostName; 
     foreach (System.Net.IPAddress listip in ip.AddressList) 
     { 
      lblip.Text ="Địa Chỉ IP Server : "+listip.ToString(); 

      IPAddress ipAd = IPAddress.Parse(listip.ToString()); 
      myList = new TcpListener(ipAd, 4444); 
      myList.Start(); 
     } 
    } 

    void connect() 
    { 
     txt_show.Text="Waitting for connect from android..."; 
     while (true) 
     { 
      server_socket = myList.AcceptSocket(); 


      byte[] data_rec = new byte[1024]; 
      int k = server_socket.Receive(data_rec); 


       char cc; 
       String mes = null; 
       for (int i = 0; i < k - 1; i++) 
       { 
        cc = Convert.ToChar(data_rec[i]); 
        mes += cc.ToString(); 
       } 
       if (mes != null) 
       { 
        string_rec = mes.ToString(); 
        txt_show.Text += Environment.NewLine + "Android: " + mes; 
       } 
     } 
    } 

    private void btn_send_Click(object sender, EventArgs e) 
    { 


     String data_send = txt_send.Text; 
     ASCIIEncoding asen = new ASCIIEncoding(); 
     server_socket.Send(asen.GetBytes(data_send)); 
     txt_show.Text += Environment.NewLine + "Server : " + txt_send.Text; 
     txt_send.Text = ""; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     S_thread = new Thread(connect); 
     S_thread.Start(); 
    } 

и это LogCat:

FATAL EXCEPTION:Thread-10 java.util.NoSuchElementException 
at java.util.Scanner.nextLine(Scanner.java:1417) 
at iNET.Android.Thread_TCP.ThreadActivity$ClientThread.run(ThreadActivity.java:207) 
at java.lang.Thread.run(Thread.java:1019) 

спасибо всем!

+0

Что вы подразумеваете под «не работает» .. вы не получаете сообщение? – stinepike

+0

Я получил любую строку из C#, но когда я нажимаю кнопку отправки в своем приложении, она неожиданно остановилась –

+0

, поэтому в мобильном телефоне вы можете отправить строку с C# на мобильный? – stinepike

ответ

0

Не совсем уверен, но я предполагаю, что вы используете разные частные сети в мобильных и ПК. Вот почему вы можете отправлять данные во время использования эмулятора (потому что оба в ПК), но не могут отправлять по мобильному телефону.

После ваших комментариев я думаю, что ваш компьютер находится в частной сети. Таким образом, вы не можете отправлять сообщения из приложения Android с помощью введенного ip.

+0

Я получил строку от android отправить на C# .but then android остановился неожиданно.my телефон и ПК с помощью частной сети –

+0

Когда это точно сбой? – stinepike

+0

, когда я нажимаю кнопку отправки на моем мобиле –

Смежные вопросы