Постоянное TCP-соединение при выборе номера порта Android?

Если бы вам нужно было реализовать постоянное TCP-соединение на Android, какой номер порта вы бы выбрали?

Это тип соединения, используемый службой Google C2DM.


person Erdal    schedule 25.08.2011    source источник
comment
Вы хотите знать, какой порт вы должны использовать для демона на вашем сервере? Я правильно это понял?   -  person Julian    schedule 05.09.2011
comment
да, для сервера, так как клиент инициирует соединение.   -  person Erdal    schedule 06.09.2011
comment
это очень интересно и немного проясняет ситуацию: labs.ericsson.com/apis/network -зонд   -  person Erdal    schedule 07.09.2011


Ответы (3)


Используйте любой порт. Вероятно, это не имеет большого значения, если он выше 1024. Допустим, вы выбрали порт 5000.

Я бы рекомендовал использовать второй IP-адрес и перенаправлять весь трафик с ip2:80 на ip1:5000. Таким образом, вы можете обойти любые ограничения брандмауэра в вашей сети.

Если вам нужны дополнительные сведения о добавлении второго IP-адреса и добавлении NAT в ваши iptables для перенаправления трафика с порта 80 на ip2 на порт 5000 на ip1, я могу поделиться с вами своими заметками.

person Eamorr    schedule 08.09.2011
comment
Итак, вы предлагаете, чтобы клиентское приложение подключалось к порту 80? - person Erdal; 09.09.2011
comment
Да, это не проблема, если у вас два IP-адреса. В моей сотовой сети открыты только порты 80 и 443 — вот как я это обхожу. - person Eamorr; 09.09.2011
comment
и как долго будет оставаться соединение, прежде чем оператор решит его убить? Я имею в виду, как часто я должен отправлять Keep Alives? - person Erdal; 09.09.2011
comment
Точно сказать не могу. Я думаю, что это может варьироваться от оператора к оператору в зависимости от сетевого оборудования, которое они используют. Вы хотите делать длинные опросы и/или пуш сервера? Если это так, я бы рекомендовал использовать Node.js на стороне сервера и Socket.IO на стороне клиента. - person Eamorr; 09.09.2011
comment
Я хочу, чтобы сокет tcp всегда был подключен и выполнял push-уведомление сервера. Интересный указатель на Socket.IO. Я думаю, это только Javascript, не так ли? Мое приложение - это нативная Java для Android. Спасибо! - person Erdal; 09.09.2011

Как насчет 1764 года? (42*42). Или, возможно, 3141?

person JesusFreke    schedule 05.09.2011
comment
Это зависит от того, хотите ли вы округлить или обрезать;) - person JesusFreke; 06.09.2011

Технически не имеет значения, какой порт вы выберете. Вы просто не можете использовать порт, который нужен для другой службы, если вы также хотите запустить эту службу. Поэтому, если вы хотите запустить его на почтовом сервере, порт 25 — плохой выбор.

Но поскольку иногда существуют брандмауэры, которые могут фильтровать трафик, я бы порекомендовал порт 443 (https), где у вас немного больше шансов получить трафик.

person Julian    schedule 06.09.2011
comment
Я почти уверен, что вы не сможете привязаться к низким портам - person JesusFreke; 06.09.2011
comment
Я хочу поддерживать это соединение, не отправляя по нему какой-либо трафик столько времени, сколько необходимо. Я не уверен, знаете ли вы, что операторы удаляют соединения, которые они считают устаревшими, через некоторое время. Интересно, делают ли они это более агрессивно для соединений, использующих порт 443... - person Erdal; 06.09.2011
comment
@Julian: в системах Linux обычно требуются специальные разрешения для привязки к младшим портам (‹1024). Я считаю, что на Android обычное приложение может привязываться только к портам › 1024. Например, см.: code.google.com/p/android/issues/detail?id=4039 (старая проблема... но я думаю, что она все еще актуальна) - person JesusFreke; 06.09.2011
comment
@Erdal Carriers делают всякие странные вещи. Не будет одного решения для всего. - person Julian; 06.09.2011
comment
@JesusFreke Он попросил порт на сервере, а Android обычно не используется на сервере. - person Julian; 06.09.2011