Сокеты Java через Интернет: ConnectException (тайм-аут операции) - PullRequest
2 голосов
/ 28 февраля 2012

Я пытаюсь открыть сокет для сайта через Интернет, но не могу.Примерно через минуту выдается ConnectException о том, что время операции истекло.

Socket clientSocket = new Socket(InetAddress.getByName("gmail.com"), 25);

Мой компьютер подключен к маршрутизатору, который подключен к Интернету.Мой маршрутизатор настроен для направления всех входящих данных порта 25 на порт 2550 на моей локальной машине (192.168.2.2).Итак, я подумал, может быть, если я установлю параметры «локальный адрес» и «локальный порт» в конструкторе Socket, это может сработать ... но это также дает мне ошибку «истекло время ожидания операции».

Socket clientSocket = new Socket(InetAddress.getByName("gmail.com"), 25, InetAddress.getByName("192.168.2.2"), 2550);

Я видел этот ТАК вопрос , но мне было интересно, может кто-нибудь еще пролить свет на эту проблему.Спасибо.

Ответы [ 2 ]

7 голосов
/ 28 февраля 2012

Вы пытаетесь подключиться к порту 25 на gmail.com, но этот компьютер не является сервером электронной почты.Сначала необходимо найти запись MX для gmail.com, а затем попытаться подключиться к одному из серверов доставки, упомянутых в возвращенной записи MX.

Например, с dig mx gmail.com на моем компьютере я получаю:

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> mx gmail.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34063
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;gmail.com.                     IN      MX

;; ANSWER SECTION:
gmail.com.              1697    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              1697    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
gmail.com.              1697    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              1697    IN      MX      10 alt1.gmail-smtp-in.l.google.com.
gmail.com.              1697    IN      MX      20 alt2.gmail-smtp-in.l.google.com.

;; AUTHORITY SECTION:
gmail.com.              266895  IN      NS      ns1.google.com.
gmail.com.              266895  IN      NS      ns2.google.com.
gmail.com.              266895  IN      NS      ns3.google.com.
gmail.com.              266895  IN      NS      ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         262525  IN      A       216.239.32.10
ns2.google.com.         262525  IN      A       216.239.34.10
ns3.google.com.         262525  IN      A       216.239.36.10
ns4.google.com.         262525  IN      A       216.239.38.10

;; Query time: 65 msec
;; SERVER: 144.52.10.15#53(144.52.10.15)
;; WHEN: Tue Feb 28 14:30:04 2012
;; MSG SIZE  rcvd: 295

Поэтому попробуйте подключиться к порту 25 на gmail-smtp-in.l.google.com (это сервер с самым низким номером приоритета MX).

1 голос
/ 28 февраля 2012

То есть вы хотите получать почтовые сообщения от Google на ваш роутер?Это единственная причина для пересылки входящего трафика с порта 25 на 2550. Если вы хотите это сделать, вам потребуется использовать ServerSocket для получения входящего соединения на вашем сервере 192.168.2.2.У вас проблемы с тем, что Socket инициирует соединение с сервером.Это клиентский сокет.ServerSocket ожидает входящих соединений.Проведите небольшое исследование о том, как работают ServerSockets, но если вы действительно хотите получать входящие соединения, вам придется реализовать протокол SMTP, который не является небольшим подвигом.Существуют библиотеки SMTP, которые вы можете использовать повторно.Проверьте проект Apache James, который похож на сервлеты для почтовых серверов.

http://james.apache.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...