gpt4 book ai didi

windows - Windows 7 上的多播套接字

转载 作者:可可西里 更新时间:2023-11-01 10:00:04 26 4
gpt4 key购买 nike

此代码在 Linux 和 Windows XP 上运行良好,但它总是无法在 Windows 7 64 位和 Windows Server 2008 上添加多播成员。

uses

Classes, Sockets,
{$IFDEF MSWINDOWS}
Windows,
Winsock,
{$ELSE}
BaseUnix,
UnixType,
{$ENDIF}
Sysutils;

type
TIP_mreq = packed record
imr_multiaddr: in_addr; // IP multicast address of group
imr_interface: in_addr; // local IP address of interface
end;

var
ASock_Addr : SockAddr_In;
FSocket : LongInt;
ipmreq : TIP_mreq;
MasterFD,
TempFD : TFDSet;
TestInt : Integer;
Timeout : TTimeVal;
begin
FSocket := fpSocket(AF_INET, LongInt(SOCK_DGRAM), 0);
if (FSocket > 0) then
begin
fpSetSockOpt(FSocket, SOL_SOCKET, SO_REUSEADDR, PChar('True'), Length('True'));
FillByte(ASock_Addr, SizeOf(SockAddr_In), 0);
ASock_Addr.sin_family := AF_INET;
ASock_Addr.sin_port := HtoNS(15510);
ASock_Addr.sin_addr.S_addr := INADDR_ANY;

if (fpbind(FSocket, @ASock_Addr, SizeOf(SockAddr_In)) = 0) then
begin
FillByte(ipmreq, SizeOf(Tip_mreq),0);
ipmreq.imr_multiaddr.s_addr := StrToNetAddr('224.126.126.126').s_addr;
ipmreq.imr_interface.s_addr := StrToNetAddr('10.0.0.3').s_addr;
fpSetsockOpt(FSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, @ipmreq, SizeOf(ipmreq));
{$IFDEF MSWINDOWS}
FD_SET(FSocket, MasterFD);
{$ELSE}
fpFD_SET(FSocket, MasterFD);
{$ENDIF}

此代码中的 fpSetSockOpt 在 Windows 7 和 Server 2008 上将始终返回 -1

最佳答案

我想通了。这是与这些操作系统相关的 Freepascal 问题。通过将 fpBind 和 fpSetSockOpt 更改为它们的 Winsock 调用(Bind 和 SetSockOpt),它确实可以在这些操作系统中工作。

关于windows - Windows 7 上的多播套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com