2012-03-24 2 views
0

ich überall gesucht habe eine Antwort auf diese Frage zu finden:TCP-Verbindung zum Senden und Empfangen von Java/Android mit Visual Basic .NET Server

Ich habe einen TCP-Client auf meiner Android-Anwendung, die eine Nachricht an den Server sendet die in Visual Basic .NET Framework geschrieben 4.

Jetzt möchte ich eine Nachricht von meinem Server an das Telefon über 3g senden, es funktioniert auf wiFi und 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(); 
    } 

} 

ich es starten in die OnCreate-Methode

Jetzt schicke ich eine Nachricht mit (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 

On WiFi wird es ankommen, werden sie nicht auf 3G ... jede Idee ist, wie dies zu tun?

Wie archivieren andere Anwendungen dies?

+1

Wie erhalten Sie die IP-Adresse von VB zu verbinden? – BWitched

+0

die IP, die verbunden war, 'Dim Zuhörer als TcpListener = CType (ar.AsyncState, TcpListener) Dim Clientsocket Wie TcpClient = listener.EndAcceptTcpClient (ar) Dim Daten Dim rcvData As New IO.StreamReader (Clientsocket. GetStream) Data = rcvData.ReadLine connectedIP = clientSocket.Client.RemoteEndPoint.ToString.Split (":") (0) rcvData.Close() clientSocket.Close() ' – Marco

Antwort

0

Ich glaube, Sie haben ein Problem mit der IP-Adresse, die von Ihrem Mobilfunkbetreiber zugewiesen wurde. Die Tatsache, dass funktioniert auf WLAN, aber nicht auf 3G, ich denke, das ist, weil Ihr Handy (wenn über 3G verbunden) keine öffentliche IP-Adresse hat.

Wenn Sie SocketServer in Ihrem Mobiltelefon verwenden, öffnen Sie einen Port und warten darauf, dass andere sich mit ihm verbinden. Wenn Ihre IP-Adresse nicht aus dem Internet erreichbar ist, wird es nicht passieren (es ist wie ein Computer hinter einer Firewall.)

Könnten Sie versuchen, den Server in der VB-Maschine zu implementieren, unter der Annahme, dass es eine öffentliche erreichbare Adresse hat ? Auf diese Weise würde das Telefon nicht als Server fungieren, es wäre nicht notwendig, eine erreichbare Adresse zu haben, solange die VB-Maschine eine hat. Dann sollten Sie die Socket-Klasse verwenden, um sich an die Server-IP und den Port zu binden.

+0

Ich wusste das, ich werde nur eine bidirektionale Kommunikation machen ... – Marco

+0

Sie können bidirektionale Kommunikation haben, sobald Ihre Verbindung eingerichtet ist wurde mit getInputStream() und getOutputStream() in Ihrem Socket-Objekt erstellt. Aber es tut mir leid. Wenn Sie in Ihrem Mobiltelefon keine öffentliche Adresse haben, kann die Verbindung vom Server nicht gestartet werden. Aus diesem Grund hat das FTP-Protokoll den passiven Modus implementiert.Je nach Kontext, in dem Sie Ihre App bereitstellen möchten, können jedoch in der Regel öffentliche Adressen erworben werden. Es hängt von Ihrer Telekom ab. – BWitched

0

Völlig verwirrt durch Ihre Codeliste oben ..

Wenn Sie einen Server in VB.NET hosten möchten, sollten Sie nicht Verwendung TcpClient Klasse aber TcpListener und wenn Sie eine bessere Leistung benötigen, verwenden Socket Klasse direkt.

Auf der Android-Client-Seite sollten Sie new Socket(server,servPort), wenn Sie Nachricht senden möchten, schreiben Sie die outputStream, und lesen Sie die inputStream, um Nachricht zu empfangen.

+0

^^ das ist, was ich tat – Marco

Verwandte Themen