[英]android socket communication through internet
我正在嘗試在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”,則我無法連接。
編輯:
好的,我發現這是我的防火牆。
Emulator使用與計算機相同的網絡,因此它將能夠將其路由到計算機。 但是,為了使手機與計算機連接,您必須指定一個不同的IP,它基本上是計算機的IP。
我猜您正在使用一些共享的網絡,並獲得此(10.0.2.2)IP。 您的計算機應直接連接到Internet,以便通過電話工作。
好的,我發現這是我的防火牆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.