Я делаю небольшое программирование сокетов на Android (обратите внимание, я сказал, что сокет, а не HttpClient или HttpUrlConnection), и я сталкиваюсь с очень странной проблемой, когда я не могу установить соединение с моим сервером Tomcat через порт 443, но8443 в порядке.Мой код очень прост, это все, что нужно сделать:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
Socket s = new Socket();
InetSocketAddress addr = new InetSocketAddress("10.1.1.1", 443);
s.setKeepAlive(true);
s.setSoTimeout(300000);
s.connect(addr);
}catch{<my catch statement>}
}
Вот и все.Я помещаю программу на свое устройство и запускаю ее, но она всегда выдает ошибку SocketException: Operation Timed Out
.Однако если я переключу порт на стороне сервера и на стороне кода на 8443, мое устройство не сможет подключиться без проблем.Я ничего не делаю, кроме изменения номера в файле server.xml.
Несколько вещей, на которые интересно обратить внимание: если я запускаю ту же самую вещь в эмуляторе на моем компьютере, она работает просто отлично.Я также запустил wireshark для соединения между устройством и моим компьютером, и похоже, что он продолжает отбрасывать ICMP Destination Unreachable: Destination Port Unreachable
.Как это может быть, когда я могу пропинговать его со своего устройства?
Я посмотрел, было ли это более уместным при сбое сервера, но из часто задаваемых вопросов там, кажется, больше ориентирован на профессиональные, а не личные проблемы с сервером.Кто-нибудь знает, почему Android-устройство не может подключиться к определенным портам на моем сервере, когда мой эмулятор может?И почему переключение на 8443 внезапно позволяет соединению работать?