Internet上的Java套接字:ConnectException(操作超时)
我正在尝试通过Internet打开一个网站的套接字,但无法打开。大约一分钟后,抛出一个Internet上的Java套接字:ConnectException(操作超时),java,networking,Java,Networking,我正在尝试通过Internet打开一个网站的套接字,但无法打开。大约一分钟后,抛出一个ConnectException,表示操作超时 Socket clientSocket = new Socket(InetAddress.getByName("gmail.com"), 25); 我的电脑连接到路由器,路由器连接到互联网。我的路由器配置为将所有传入端口25数据定向到本地机器(192.168.2.2)上的端口2550。因此,我想如果我在套接字构造函数上设置“local address”和“loc
ConnectException
,表示操作超时
Socket clientSocket = new Socket(InetAddress.getByName("gmail.com"), 25);
我的电脑连接到路由器,路由器连接到互联网。我的路由器配置为将所有传入端口25数据定向到本地机器(192.168.2.2)上的端口2550。因此,我想如果我在套接字
构造函数上设置“local address”和“local port”参数,它可能会工作……但这也会给我一个“操作超时”错误
我看到了,但想知道是否有人能在这个问题上透露更多的信息。谢谢。您正试图连接到
gmail.com
上的端口25,但该机器不是电子邮件服务器。您必须首先查找gmail.com
的MX记录,然后尝试连接到返回的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
;挖掘9.3.6-P1-RedHat-9.3.6-16.P1.el5 mx gmail.com
;; 全局选项:printcmd
;; 得到答案:
;; ->>HEADER那么你想接收从谷歌发送到路由器的邮件信息?这是将传入流量从端口25转发到端口2550的唯一原因。如果要这样做,则需要使用ServerSocket在192.168.2.2服务器上接收传入连接。您遇到的问题是套接字启动到服务器的连接。这是一个客户端套接字。ServerSocket等待传入的连接。对ServerSockets的工作原理做一点研究,但是如果你真的想接收传入的连接,你必须实现SMTP协议,这是一项不小的成就。有一些SMTP库可以重用。检查apachejames项目,它类似于邮件服务器的servlet
您的路由器配置仅用于传入连接,而不是传出连接。@NayukiMinase或带有DNS提供程序的JNDI。Wooo!!成功了!但gmail将我的电子邮件标记为垃圾邮件(MX记录是SMTP的一部分吗?我正在尝试编写一个SMTP服务器,并认为发送电子邮件只需打开电子邮件主机部分(在“@”之后的部分)的套接字即可。)。不过,我让服务器部分正常工作,所以至少我可以接收电子邮件。@Michael:是的,MX是SMTP规范的一部分。请参阅。@GregHewgill您知道使用端口25还是587更好吗?我认为587应该是新的标准。这两个端口用于不同的目的。通常,端口25上的传入连接被视为一个新的标准“外面”连接,用于向本地用户发送邮件。端口587上的连接被视为来自本地域用户的连接,打算将邮件发送到其他地方。Gmail要求Gmail用户使用端口587发送邮件,因为它需要对端口587上的所有连接进行身份验证。SMTP的许多问题,例如“开放式中继”源于对端口25的两种用途的使用“部分工作。因此,我可以从我的Gmail帐户发送电子邮件,我的SMTP服务器将正确接收它。实际上并不太复杂……我能够编写一个程序,通过阅读SMTP Wikipedia页面来接收电子邮件。我从头开始创建SMTP服务器,因为我想了解电子邮件的工作原理。
; <<>> 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