我知道我的 C 方式,但我在 Pascal 中有一个使用 synapse 库的 UDP 客户端和服务器的现有代码。我的问题是:
客户:
- 它是连接()广播(而不是 sendto())的好方法吗?
服务器:
- 怎么可能调用 bind() 两次?(主要问题)
- 你为什么要绑定()到发件人IP?
问候
编辑:
澄清如何使用此代码:
有多个客户端尝试将数据包发送到服务器。在任何客户端的第一个数据包到达服务器后,服务器将从此只接受来自第一个客户端的数据。客户端和服务器在不同的机器上运行。
客户:
UDPport:=TUDPblockSocket.Create;
UDPport.EnableBroadcast(true);
UDPport.Connect(cBroadcast,'1234');
while (not EOF(DATAfile)) do begin
read(DATAfile,DATApacket);
with (DATApacket) do begin
NCOMport.SendBuffer(Addr(DATApacket),SizeOf(DATApacket));
end;
end;
服务器:
begin
with TUDPblockSocket.Create do begin
Bind(cAnyHost,'1234');
AnyHost:=true;
while (true) do begin
if (WaitingData>0) then begin
repeat
buffer:=RecvPacket(c_UDPtimeout);
until (WaitingData<=0);
if (AnyHost) then begin
SenderIP:=GetRemoteSinIP;
Bind(SenderIP,'1234');
AnyHost:=false;
end else begin
{extracting information out of the received data buffer}
end;
end;
end;
Free;
end;
end;
和:
const c_UDPtimeout = 100;
问候