Delphi 2010 - Socket Port 119 не работает - PullRequest
1 голос
/ 11 марта 2011

Я открываю сокет на порту 119 (используя idHttpServer), и он открывается нормально (об ошибках не сообщается, и я вижу, что порт 119 открывается, посмотрев на netstat).Но когда мой сокет-клиент отправляет запрос на порт сервера 119, сервер не получает запрос, и клиент не работает.Если я меняю порт сокета на другой (например, 90, 80, 120), он работает нормально.
Я предполагаю, что порт сокета 119 является зарезервированным портом SO (но на этом порте ничего не работает, я уверен, чтотот).Я также знаю, что порт 119 используется протоколом новостей (но нет сервера новостей).
Кто-нибудь знает, почему я не могу подключиться к порту 119?То же самое происходит с портом 110 (поп-сервер включен, но не поп-сервер).Это сводит меня с ума.

Delphi 2010
Последняя версия indy
Серверная версия Windows 2003 для предприятий.

Ответы [ 5 ]

1 голос
/ 12 марта 2011

Поскольку вы не получили сообщение об ошибке при открытии / связывании порта, похоже, что на вашей стороне сервера все в порядке, скорее всего блокируется клиентская часть. Время посмотреть на брандмауэр на клиенте ...

1 голос
/ 11 марта 2011

Это должно быть что-то на вашей машине для разработки, потому что вполне допустимо использовать порт 119 (или любой другой доступный порт) с INDY HTTP Server. Примите во внимание, что не рекомендуется использовать порты, отличающиеся от 80 ниже 1024 зарезервированных портов для этого, но это другое дело.

Я сделал простой тест, два приложения. Вот соответствующие части:

Сервер

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;

Результат:

Successfully connected

Не забудьте разрешить трафик на брандмауэре, например, приняв диалоговое окно Windows по умолчанию (в случае использования брандмауэра Windows):

Firewall warning

1 голос
/ 11 марта 2011

Проверьте, действительно ли порт 119 свободен. Например, с TcpView от Sysinternals.

http://technet.microsoft.com/en-us/sysinternals/bb842062

0 голосов
/ 11 марта 2011

Вы уверены, что служба NNTPSVC не запущена?http://support.microsoft.com/kb/832017

Вы также можете использовать Portqry.exe, чтобы проверить, работает ли порт http://support.microsoft.com/default.aspx?scid=kb;en-us;310099

Последнее, что я помню об этой теме, это то, что ISA иногда блокирует этот порт.Поэтому вам нужно убедиться, что этого не происходит.

HTH,

0 голосов
/ 11 марта 2011

Похоже, что порт 119 используется несколькими вредоносными программами (Happy99 и другими). Возможно, ваш антивирус блокирует порт. Кроме того, вы открыли порт из брандмауэра Windows? только мои 5 центов ...

С уважением,
Radu

...