Я экспериментирую с сокетом связи между 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», тогда я не смогу подключиться.это был мой брандмауэр.