Delphi 2010 - 套接字端口 119 不起作用
Posted
技术标签:
【中文标题】Delphi 2010 - 套接字端口 119 不起作用【英文标题】:Delphi 2010 - Socket Port 119 does not work 【发布时间】:2011-03-11 15:05:34 【问题描述】:我正在端口 119 上打开一个套接字(使用 idHttpServer),它打开正常(没有报告错误,我可以通过查看 netstat 看到端口 119 已打开)。但是当我的套接字客户端向服务器 119 端口发送请求时,服务器没有收到请求,客户端也不工作。如果我将套接字端口更改为另一个端口(例如 90、80、120),它可以正常工作。 我猜套接字端口 119 是一个 SO 保留端口(但该端口上没有运行任何东西,我确信这一点)。我也知道新闻协议使用119端口(但没有新闻服务器)。 有谁知道为什么我无法连接到 119 端口?同样的事情发生在 110 端口(pop,但不是 pop server on)。快把我逼疯了。
德尔福 2010 最新的印地版本 Windows 2003 服务器企业版。
【问题讨论】:
那为什么不用120呢?真的有必要用119吗? 端口 119 仅在您启动服务器时使用,还是在服务器停止时也在使用?无论如何,下面的 cmets 之一来确定哪个进程打开了端口 【参考方案1】:它应该是你的开发机器中的东西,因为将 119 端口(或任何其他可用端口)与 INDY HTTP Server 一起使用是完全有效的。考虑到不建议在 1024 保留端口下使用不同于 80 的端口,但这是另一回事。
我做了一个简单的测试,两个应用程序。以下是相关部分:
服务器
dfm
object Form2: TForm2
Caption = 'Server'
object IdHTTPServer1: TIdHTTPServer
Active = True
Bindings = <>
DefaultPort = 119
Left = 56
Top = 40
end
end
客户
dfm
object Form3: TForm3
Caption = 'Form3'
object Memo1: TMemo
Left = 16
Top = 8
Width = 185
Height = 89
Lines.Strings = (
'Memo1')
TabOrder = 0
end
object Button1: TButton
Left = 207
Top = 8
Width = 75
Height = 25
Caption = 'Connect'
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 207
Top = 39
Width = 75
Height = 25
Caption = 'Disconnect'
TabOrder = 2
OnClick = Button2Click
end
object IdTCPClient1: TIdTCPClient
OnStatus = IdTCPClient1Status
ConnectTimeout = 0
Host = 'localhost'
IPVersion = Id_IPv4
Port = 119
ReadTimeout = -1
Left = 32
Top = 40
end
end
过去
procedure TForm3.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect;
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
IdTCPClient1.Disconnect;
end;
procedure TForm3.IdTCPClient1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
begin
Memo1.Lines.Add(AStatusText);
end;
结果:
不要忘记允许防火墙上的流量,例如通过接受默认的 windows 对话框(如果使用 windows 防火墙):
【讨论】:
【参考方案2】:检查端口 119 是否真的空闲。例如 Sysinternals 的 TcpView。
http://technet.microsoft.com/en-us/sysinternals/bb842062
【讨论】:
或使用 telnet(telent 127.0.0.1 119)。 @Radu:在 TcpView 上你可以看到哪个进程持有端口 确实,我只是建议他一个快速的解决方案来查看应用程序是否正在使用该端口。 或 netstat -ano 以获得更具可读性的输出 (恕我直言) 而无需提升 - 然后您必须在任务管理器中查找 PID。【参考方案3】:由于您在打开/绑定端口时没有收到错误,听起来您的服务器端很好,可能是客户端被阻塞了。 是时候看看客户端上的防火墙了...
【讨论】:
【参考方案4】:似乎端口 119 被几个 mallwares(Happy99 和其他)使用。您的防病毒软件可能会阻止该端口。另外,您是否从 Windows 的防火墙打开了端口?只是我的 5 美分...
最好的问候, 拉度
【讨论】:
【参考方案5】:您确定 NNTPSVC 服务没有运行吗? http://support.microsoft.com/kb/832017
您也可以使用 Portqry.exe 来查看端口是否正常工作 http://support.microsoft.com/default.aspx?scid=kb;en-us;310099
关于这个话题,我记得的最后一件事是 ISA 有时会阻塞这个端口。所以你需要确保这不会发生。
HTH,
【讨论】:
以上是关于Delphi 2010 - 套接字端口 119 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何启动 Windows 服务网络进程以侦听 UAC 下普通用户可见的 localhost 套接字上的端口?
vmware上的Delphi7和XP测试程序,连接socket失败