uses
winsock,
windows;
Procedure HandleError;
Var ErrorCode:Integer;
S:
String;
Len:Integer;
Begin
ErrorCode := WSAGetLastError;
setlength(s, 260);
Len:= Formatmessage( Format_Message_from_System,
nil,errorCode,0,@s[1],length(s),
nil);
setlength(s, Len);
MessageBox( 0,pchar(s),'
Socket Error',
MB_OK
or MB_ICONERROR
or MB_TASKMODAL);
//raiseException wäre hier auch nicht schlecht
End;
Procedure InitSockets;
Var Data:WSAData;
Begin
If WSAStartup( MakeWord(1,1), Data) = SOCKET_ERROR
then
HandleERROR;
End;
Function createSocket_UDP:TSocket;
Begin
Result := socket( AF_INET,
SOCK_DGRAM,
IPProto_UDP);
//Socket erstellen
If Result = INVALID_SOCKET
then HandleError;
End;
Procedure sendbuf_via_UDP(
IP:
string; Port:Word;
var buf; buflen:Integer);
const BC:bool=true;
Var SockAddr:TSockAddrIn;
AddrLen:Integer;
FSocket:TSocket;
Begin
FSocket := createSocket_UDP;
setsockopt(FSocket,SOL_SOCKET,SO_BroadCast,@BC,sizeof(BC));
//BroadCast ein
AddrLen := sizeof(SockAddr);
SockAddr.sin_family := AF_INET;
SockAddr.sin_Port := htons(Port);
SockAddr.sin_Addr.S_Addr := inet_addr(PChar(
IP));
If SendTo( FSocket, buf, buflen, 0, SockAddr, AddrLen) = SOCKET_ERROR
then
HandleError;
CloseSocket( FSocket);
End;
var mystring:
string;
begin
Initsockets;
Mystring := '
Hallo Du da!';
Sendbuf_via_UDP('
255.255.255.255', 6000, MyString[1], length(Mystring));
WSACleanUP;
end.