Конференция "Сети" » IndyIPv6 не работает
 
  • @!!ex © (02.05.13 00:33) [0]
    При попытке отправить чего нибудь на IPv6 адрес пишет:
    '<здесь IP>' is not a valid integer.
    причем, что смешно, это происходит даже если я передаю не готовый адрес, а хост, например ipv6.google.com
    При этом через браузер норм открывается, что по чистому IP, что по имени.
    В чем может быть затык?
  • @!!ex © (02.05.13 00:38) [1]
     FUDPServer:=TIdUDPServer.Create(nil);
     FUDPServer.BufferSize:=100000;
     FUDPServer.ThreadedEvent:=false;
     FUDPServer.IPVersion:=Id_IPv6;
     FUDPServer.OnUDPRead:=UDPRead;
     FUDPServer.DefaultPort:=44200;
     FUDPServer.Active:=true;

  • Eraser © (02.05.13 01:08) [2]

    > @!!ex ©   (02.05.13 00:38) [1]

    код отправки и назначения IP адреса покажи.
  • @!!ex © (02.05.13 13:58) [3]
    Совершенно простой код:
    FUDPServer.Send('[2a00:1450:4010:c00::63]',44150, s);
    или
    FUDPServer.Send('xbox.com',44150, s);
    или
    FUDPServer.Send('ipv6.google.com',44150, s);
  • clickmaker © (02.05.13 15:02) [4]
    а почему Server, а не Client?
  • @!!ex © (02.05.13 15:08) [5]
    Мне не совсем ясно, что такое в терминах UDP клиент?
    Отсутствие постоянного соединения обязывает каждого клиента быть еще и сервером.
  • clickmaker © (02.05.13 17:49) [6]
    у меня вот такой код вообще выдает 'IPv6 unavailable'.
    Путем отладки выяснил, что инди пытается добыть адрес функции getaddrinfo из wship6.dll, не находит и обламывается. Там действительно нет такой функции.

    client := TIdUDPClient.Create();
    client.IPVersion := Id_IPv6;
    client.Active := true;
    s := 'Hello';
    client.Send('[2a00:1450:4010:c00::63]',44150, s);
  • @!!ex © (02.05.13 18:07) [7]
    У меня на Windows 7
    'IPv6 unavailable'
    на Windows XP - invalid integer
  • DVM © (02.05.13 19:46) [8]

    > Путем отладки выяснил, что инди пытается добыть адрес функции
    > getaddrinfo из wship6.dll, не находит и обламывается. Там
    > действительно нет такой функции.

    странно, получается ее нет в Winsock2.dll и нет в Wship6.dll. В файле IdWship6.pas есть такой комментарий:

    {
    IMPORTANT!!!

    I am doing things this way because the functions we want are probably in
    the Winsock2 dll.  If they are not there, only then do you actually want
    to try the Wship6.dll.   I know it's a mess but I found that the functions
    may not load if they aren't in Wship6.dll (and they aren't there in some
    versions of Windows).

    hProcHandle provides a transparant way of managing the two possible library
    locations.  hWship6Dll is kept so we can unload the Wship6.dll if necessary.
    }
  • @!!ex © (02.05.13 23:20) [9]
    Печально... А есть ли альтернатива Indy для работы с UDP?
  • clickmaker © (02.05.13 23:30) [10]
    есть альтернатива взять напильник и заточить инди на работу с ws2_32.dll, а не Wship6.dll
  • clickmaker © (02.05.13 23:45) [11]
    кстати, в инди 10 есть еще один косяк

    procedure TIdUDPBase.SendBuffer(AHost: string; const APort: Integer;
     const AIPVersion: TIdIPVersion; const ABuffer: TIdBytes);
    begin
     AHost := GStack.ResolveHost(AHost,AIPVersion);
     Binding.SendTo(AHost, APort, ABuffer, AIPVersion); // параметр AIPVersion отсутствовал, поэтому всегда считалось, что IPv4
    end;
  • @!!ex © (03.05.13 10:43) [12]
    я не люблю чужой код допиливать никак кроме как наследованием.
    Потому что при обновлении все допиливания сломаются.
    Надо глянуть на последнюю версию Indy, может там исправили.
  • clickmaker © (03.05.13 11:16) [13]
    в инди, что с XE 3, исправили

    да, и адрес нужно указывать без [], они нужны только в составе урла
 
Конференция "Сети" » IndyIPv6 не работает
Есть новые Нет новых   [118476   +38][b:0][p:0.001]