2012-03-24 90 views
0

我已經到處搜尋找到這個問題的答案:TCP連接使用Visual Basic .NET服務器發送和接收的Java/Android的

我有一個TCP客戶端在我的Android應用程序,它可以發送消息到服務器這是寫在Visual Basic .NET Framework 4的

現在我想從我的服務器發送消息到手機通過3G,它適用於WiFi和3G ..

private class startserver extends Thread 
{ 
public void server() throws Exception 
{ 
    String clientSentence; 
    String capitalizedSentence; 
    ServerSocket welcomeSocket = new ServerSocket(8765); 

    while(true) 
    { 
     Socket connectionSocket = welcomeSocket.accept(); 
     BufferedReader inFromClient = 
     new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
     clientSentence = inFromClient.readLine(); 
     System.out.println(clientSentence.substring(1)); 
     msgshower = clientSentence.substring(1); 
     MainActivity.this.runOnUiThread(new Runnable() { 
      public void run() { 
      Toast.makeText(MainActivity.this, "Received: " + msgshower , Toast.LENGTH_LONG).show(); 

      } 
     }); 
     capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
     outToClient.writeBytes(capitalizedSentence); 
    } 
} 


@Override 
public void run() { 

    try { 
     server(); 
    } catch (Exception e) { 

     e.printStackTrace(); 
    } 

} 

我開始它OnCreate方法

現在我與發送(VB.NET)

Private Sub sends(ByVal message As String) 
    Dim tcp As New TcpClient 
    tcp.Connect(connectedIP, 8765) 
    Dim bw As New IO.BinaryWriter(tcp.GetStream) 
    bw.Write(message) 
    bw.Close() 
    tcp.Close() 
End Sub 

在WiFi就會到達,一個消息就不會3g的它...任何想法是如何做到這一點?

其他應用程序如何將其歸檔?

+1

如何從VB連接到IP地址? – BWitched 2012-03-24 18:59:24

+0

已連接的IP, '昏暗聽者作爲的TcpListener = CTYPE(ar.AsyncState,的TcpListener) 昏暗ClientSocket的作爲的TcpClient = listener.EndAcceptTcpClient(AR) 昏暗數據 昏暗RCVDATA作爲新IO.StreamReader(ClientSocket的。 GetStream) 數據= rcvData.ReadLine connectedIP = clientSocket.Client.RemoteEndPoint.ToString.Split( 「:」)(0) rcvData.Close() clientSocket.Close()' – Marco 2012-03-25 00:44:29

回答

0

我想你的移動電話運營商簽署的IP地址有問題。這個事實在wifi上運行,但不在3G上,我認爲這是因爲你的手機(通過3G連接)沒有公共IP地址。

當你在你的手機中使用SocketServer時,你打開一個端口等待其他人連接到它。如果您的IP地址從互聯網上是不可達的,也不會發生(這就像有一個防火牆後面的計算機)。

你能嘗試實施在VB機服務器,假設它有一個公共可達地址?這樣,手機不會充當服務器,只要VB機器有一個,就不需要有可達的地址。然後,你應該使用Socket類來綁定到服務器的IP和端口。

+0

我知道,我只會進行雙向通信... – Marco 2012-03-26 17:24:46

+0

一旦建立連接,您就可以進行雙向通信在socket對象中使用getInputStream()和getOutputStream()。但我很抱歉。如果您的手機中沒有公共地址,則連接無法由服務器啓動。這就是FTP協議實現被動模式的原因。但是,根據要部署應用程序的上下文,通常可以購買公共地址。這取決於你的電信。 – BWitched 2012-03-27 14:19:38

0

通過上面的代碼清單完全糊塗..

如果你想舉辦VB.NET中的服務器,你應該使用TcpClient類,但TcpListener,如果你需要一個更好的性能,使用Socket類直。

在Android客戶端,您應該發送new Socket(server,servPort),當您要發送消息時,請編寫outputStream,並閱讀inputStream以接收消息。

+0

^^那就是我所做的 – Marco 2012-05-06 21:48:12

相關問題