-
При попытке отправить чего нибудь на IPv6 адрес пишет: '<здесь IP>' is not a valid integer. причем, что смешно, это происходит даже если я передаю не готовый адрес, а хост, например ipv6.google.com При этом через браузер норм открывается, что по чистому IP, что по имени. В чем может быть затык?
-
FUDPServer:=TIdUDPServer.Create(nil);
FUDPServer.BufferSize:=100000;
FUDPServer.ThreadedEvent:=false;
FUDPServer.IPVersion:=Id_IPv6;
FUDPServer.OnUDPRead:=UDPRead;
FUDPServer.DefaultPort:=44200;
FUDPServer.Active:=true;
-
> @!!ex © (02.05.13 00:38) [1]
код отправки и назначения IP адреса покажи.
-
Совершенно простой код: FUDPServer.Send('[2a00:1450:4010:c00::63]',44150, s); или FUDPServer.Send('xbox.com',44150, s); или FUDPServer.Send('ipv6.google.com',44150, s);
-
а почему Server, а не Client?
-
Мне не совсем ясно, что такое в терминах UDP клиент? Отсутствие постоянного соединения обязывает каждого клиента быть еще и сервером.
-
у меня вот такой код вообще выдает '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);
-
У меня на Windows 7 'IPv6 unavailable' на Windows XP - invalid integer
-
> Путем отладки выяснил, что инди пытается добыть адрес функции > 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. }
-
Печально... А есть ли альтернатива Indy для работы с UDP?
-
есть альтернатива взять напильник и заточить инди на работу с ws2_32.dll, а не Wship6.dll
-
кстати, в инди 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;
-
я не люблю чужой код допиливать никак кроме как наследованием. Потому что при обновлении все допиливания сломаются. Надо глянуть на последнюю версию Indy, может там исправили.
-
в инди, что с XE 3, исправили
да, и адрес нужно указывать без [], они нужны только в составе урла
|