我到处寻找这个问题的答案:
我的android应用程序上有一个TCP客户端,它向服务器发送一条消息,该消息是用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它不会......任何想法是如何做到的?
其他应用程序如何存档?
答案 0 :(得分:0)
完全被上面的代码列表搞糊涂了..
如果你想在VB.NET中托管服务器,你应该不使用TcpClient
类但TcpListener
,如果你需要更好的性能,请使用{{1直接上课。
在Android客户端,您应Socket
,当您要发送消息时,请写new Socket(server,servPort)
,然后阅读outputStream
以接收消息。
答案 1 :(得分:0)
我认为您的移动电话运营商所分配的IP地址存在问题。我认为这是因为您的手机(通过3G连接时)没有公共IP地址。
当您在移动设备中使用SocketServer时,您正在打开一个等待其他人连接的端口。如果您的IP地址无法通过互联网访问,则不会发生(这就像在防火墙后面安装计算机一样。)
您是否可以尝试在VB机器中实现服务器,假设它具有公共可达地址?这样,只要VB机器有一个,手机就不会充当服务器,也没有必要拥有可达的地址。然后,您应该使用Socket类绑定到服务器ip和端口。