2011-09-25 139 views
2

我正在尝试android和windows之间的套接字通信。 一切工作正常,直到我使用10.0.2.2地址是模拟器运行的计算机的环回。但是,如果我给任何其他地址的Socket构造函数的连接超时。 我的目标是通过互联网在我的手机和我的电脑之间进行通信。 我也试过在我的手机上,所以我不认为这是防火墙问题。 这里是我的代码:通过互联网的android套接字通信

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 
     clientSocket = new Socket("10.0.2.2", 48555); 
     Log.d("Offdroid", "socket connected"); 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.out.println(e.toString()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.out.println(e.toString()); 
    } 
} 

public void connectServer(View button) { 
    try { 
     String message = "shutdown"; 
     byte[] messageBytes = message.getBytes("US-ASCII"); 
     int messageByteCount = messageBytes.length; 
     byte[] messageSizeBytes = new byte[2]; 
     messageSizeBytes = intToByteArray(messageByteCount); 

     byte[] sendBytes = concatenateArrays(messageSizeBytes, messageBytes); 

     Log.d("Offdroid", Integer.toString(messageSizeBytes.length)); 

     clientSocket.setReceiveBufferSize(16); 
     clientSocket.setSendBufferSize(512); 
     OutputStream outStream = clientSocket.getOutputStream(); 
     //InputStream inStream = clientSocket.getInputStream(); 

     outStream.write(sendBytes, 0, sendBytes.length); 
    } catch(Exception EX) { 
     Log.e("Offdroid", EX.getMessage()); 
    } 
} 

我也在寻找内置功能,而不是concatenateArrays功能,简单地将两个字节数组一起一个java。

编辑:

对不起,或许我没有提供足够的信息。我已经试过我的外部IP用于互联网连接和我的局域网IP。路由器上的端口被转发到我的电脑。所以,如果我写“192.168.1.101”或互联网服务提供商给出的IP代替“10.0.2.2”,比我无法连接。

编辑:

好吧,我知道这是我的防火墙。

回答

0

好吧,我知道这是我的防火墙。

0

模拟器需要使用与您的计算机相同的网络,因此它将能够将其路由到计算机。但是,为了让手机与电脑连接,您必须提供不同的IP,这基本上就是电脑的IP。

我猜你正在使用一些共享网络,并获取此(10.0.2.2)IP。您的电脑应该直接连接到互联网,以便通过电话进行操作。

+0

对不起,也许我没有提供足够的信息。 我已经试过我的外部IP用于互联网连接和我的局域网IP。路由器上的端口被转发到我的电脑。 因此,如果我写“192.168.1.101”或由互联网服务提供商给出的IP地址代替“10.0.2.2”,比我无法连接。 – Jumi