我正试图通过互联网打开一个网站的套接字,但不能.大约一分钟后,a ConnectException抛出一声说操作超时.
Socket clientSocket = new Socket(InetAddress.getByName("gmail.com"), 25);
Run Code Online (Sandbox Code Playgroud)
我的计算机连接到路由器,该路由器连接到Internet.我的路由器配置为将所有传入端口25数据定向到本地计算机上的端口2550(192.168.2.2).所以,我想也许如果我在Socket构造函数上设置"本地地址"和"本地端口"参数它可能会工作...但这也给了我一个"操作超时"错误.
Socket clientSocket = new Socket(InetAddress.getByName("gmail.com"), 25, InetAddress.getByName("192.168.2.2"), 2550);
Run Code Online (Sandbox Code Playgroud)
我看到了这个问题,但是想知道是否有人能够对这个问题有所了解.谢谢.
您正尝试连接到端口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
Run Code Online (Sandbox Code Playgroud)
因此,请尝试连接到端口25 gmail-smtp-in.l.google.com(具有最低MX优先级编号的服务器).