2012-03-24 55 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

相关问题