2012-07-04 50 views
1

我想從Android的字符串發送到我的電腦(Visual Basic中2010)我嘗試這一個,但它不工作。請人幫助我..從機器人發送字符串到Visual Basic 2010

我從拿到我的Android代碼: http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

而且它的樣子:

package com.zelacroix.bukumenu; 
import java.io.*; 
import java.net.*; 
import android.app.Activity; 
import android.os.*; 
import android.util.*; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.*; 
public class TesKirim extends Activity { 

     private EditText serverIp; 

     private Button connectPhones; 

     private String serverIpAddress = "192.168.1.2"; 

     private boolean connected = false; 

     private Handler handler = new Handler(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.teskirim); 

      serverIp = (EditText) findViewById(R.id.server_ip); 
      connectPhones = (Button) findViewById(R.id.connect_phones); 

      connectPhones.setOnClickListener(new OnClickListener() { 
      @Override 
       public void onClick(View v) { 
        if (!connected) { 
         serverIpAddress = serverIp.getText().toString(); 
         if (!serverIpAddress.equals("")) { 
          Thread cThread = new Thread(new ClientThread()); 
          Toast.makeText(getApplicationContext(), 
               "masuk if", 
               10) 
           .show(); 
          cThread.start(); 
         } 
        } 
       } 
      }); 
     }; 

     public class ClientThread implements Runnable { 
      public void run() { 
       try { 
        InetAddress serverAddr = 
         InetAddress.getByName(serverIpAddress); 
        Log.d("ClientActivity", "C: Connecting..."); 
        Socket socket = new Socket(serverAddr , 10000); 
        connected = true; 
        while (connected) { 
         try { 
          Log.d("ClientActivity", "C: Sending command."); 
          PrintWriter out = 
           new PrintWriter(
            new BufferedWriter(
             new OutputStreamWriter(
              socket.getOutputStream())), 
            true); 

           // where you issue the commands 
           out.println("Hey Server!"); 
           Log.d("ClientActivity", "C: Sent."); 
         } catch (Exception e) { 
          Log.e("ClientActivity", "S: Error", e); 
         } 
        } 
        socket.close(); 
        Log.d("ClientActivity", "C: Closed."); 
       } catch (Exception e) { 
        Log.e("ClientActivity", "C: Error", e); 
        connected = false; 
       } 
      } 
     }; 
}; 

我的Visual Basic中使用UDP方法。而它的樣子:

Imports System.Net.Sockets 
Imports System.Net 
Imports System.IO 
Imports System.Text 

Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, 
           ByVal e As System.EventArgs) Handles Button1.Click 
     Try 
      Dim udp_Client As New UdpClient(10000) 

      Dim remoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0) 

      Dim receiveBytes As [Byte]() = udp_Client.Receive(remoteIpEndPoint) 
      Dim returnData As String = Encoding.ASCII.GetString(receiveBytes) 
      ListBox1.Items.Add(returnData.ToString) 
      udp_Client.Close() 
     Catch ex As Exception 
      ListBox1.Items.Add(ex.ToString()) 
     End Try 
    End Sub 
End Class 

請我really2需要comunicate他們..

+0

請告訴我問題你都面臨着? – user370305

+0

問題在哪裏?你的android不發送數據?或者,也許你的VB不收到它?也許字符串編碼有問題? 如果字符串被髮送,你使用Wireshark檢查過嗎? – Zuljin

+0

首先,我的問題..我的Android只是運行到Log.d(「ClientActivity」,「C:連接...」);所以我檢查了DDMS日誌。然後代碼不能進一步proccess :(什麼錯呢?我得到了錯誤的東西說,像家人不支持。 – Michael

回答

5

我認爲問題是由於您正在混合TCP和UDP通信而引起的。 Visual Basic應用程序期望通過UDP接收數據,並且Android應用程序通過TCP進行發送。我從你的代碼創建了Android和VB項目,並從Android應用程序調用UDP發送函數,通信工作正常。來自Android的字符串在VB應用程序的列表框中正確顯示。嘗試使用您的Android應用UDP套接字如下:

private void udp_send(String serverIpAddress) throws IOException 
     { 
      String messageStr="Hello Android!"; 
      int server_port = 10000; 
      DatagramSocket s = new DatagramSocket(); 
      InetAddress local = InetAddress.getByName(serverIpAddress); 
      int msg_length=messageStr.length(); 
      byte[] message = messageStr.getBytes(); 
      DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port); 
      s.send(p); 
     } 

[我試圖在Android模擬器,並在同一臺機器上運行的應用VB這個代碼。如果您嘗試跨不同的計算機並且仍然面臨上述代碼的問題,請確保端口10000的udp通信未被某些防火牆阻止。您可以從Android應用給予詳細異常日誌對我們來說更好,如果有必要理解問題]

+0

哇!賓果!謝謝nilesh pawar!你的代碼它的工作!非常感謝!!因爲我是一個新手,我不知道如果我創建SOCKET對象它是TCP ..非常感謝你..如果我想我的Android從VB使用UDP那麼我該怎麼辦?你有什麼參考嗎?非常感謝你!! – Michael

+1

你可以使用數據報套接字如下在Android中接收UDP數據:http://stackoverflow.com/questions/2818284/udp -server-doesnt-accept-calls-from-outside跨越不同語言製作的客戶端服務器之間的網絡通信相關代碼對於新手來說可能有點麻煩,特別是因爲不同的語言對字符串等數據有不同的表示方式。最好的方法是系統調試這些日子的開發系統給出了非常詳細的錯誤,並且簡單地在Google中複製錯誤代碼會返回大量的信息來解決問題。 –

+1

就像問題一樣,TCP通常並不比UDP更好(至少更可靠?) –