我在端口119上打开一个套接字(使用idHttpServer)并打开确定(没有报告错误,我可以通过查看netstat看到端口119已打开)。但是当我的套接字客户端向服务器119端口发送请求时,服务器不会得到客户端工作的请求。如果我将套接字端口更改为另一个(例如90,80,120),它可以正常工作 我猜套接字端口119是一个SO保留端口(但是没有在该端口上运行,我确信这一点)。我也知道端口119被新闻协议使用(但没有新闻服务器) 有谁知道为什么我不能连接到119端口? 110端口(pop,但不是pop服务器)也会发生同样的事情。这让我发疯了。
Delphi 2010
最新的indy版本
Windows 2003服务器企业版。
答案 0 :(得分:1)
检查端口119是否真的空闲。例如,使用Sysinternals的TcpView。
答案 1 :(得分:1)
它应该是您的开发机器中的东西,因为使用INDY HTTP Server的119端口(或任何其他可用端口)是完全有效的。考虑到不建议在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
PAS
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 :(得分:1)
由于您没有在端口的打开/绑定上收到错误,听起来您的服务器端很好,它可能会被阻止的客户端。 是时候看看客户端上的防火墙......
答案 3 :(得分:0)
似乎端口119被几个商城(Happy99和其他)使用。您的防病毒软件可能正在阻止该端口。还有,你从Windows的防火墙打开了端口吗?只是我5美分......
最好的问候,
拉杜
答案 4 :(得分:0)
您确定NNTPSVC服务未运行吗? http://support.microsoft.com/kb/832017
您还可以使用Portqry.exe查看端口是否正常工作 http://support.microsoft.com/default.aspx?scid=kb;en-us;310099
我记得关于这个话题的最后一件事是ISA有时会阻止这个端口。所以你需要确保没有发生这种情况。
HTH,