我正在尝试android和windows之间的套接字通信。 一切正常,直到我使用10.0.2.2地址,这是运行模拟器的计算机的环回。但是,如果我向Socket构造函数提供任何其他地址,则连接将超时。 我的目标是通过互联网在手机和电脑之间进行通信。 我也在手机上试过它,所以我不认为这是防火墙问题。 这是我的代码:
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());
}
}
我也在寻找一个java内置函数而不是concatenateArrays函数,它只是将两个字节数组放在一起。
编辑:
抱歉,也许我没有提供足够的信息。我已经尝试过我的外部IP用于互联网连接和我的局域网IP。路由器上的端口将转发到我的计算机。因此,如果我写“192.168.1.101”或互联网服务提供商提供的IP代替“10.0.2.2”,那么我无法连接。
编辑:
好的,我发现这是我的防火墙。
答案 0 :(得分:0)
Emulator使用与您的计算机相同的网络,因此它可以将其路由到计算机。但是,要让您的手机与计算机连接,您必须提供不同的IP,这基本上就是计算机的IP。
我猜你正在使用一些共享网络,并得到这个(10.0.2.2)IP。您的计算机应直接连接到Internet,以便通过电话工作。
答案 1 :(得分:0)
好的,我发现这是我的防火墙。