UDP受信




socket関数の第二引数をSOCK_DGRAMにすること。あとはbind。

以下、受信して表示するだけのプログラム。

program receive;

{$APPTYPE CONSOLE}

uses
SysUtils,
Winsock;

procedure dump(b: array of byte);
var
i, size: Integer;
begin
size := Length(b);
Write('       +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f');
for i := 0 to size - 1 do
begin
if(i mod 16 = 0)then
Write(#13#10 + Format('0x%.4x ', [i]));
Write(Format('%.2x ', [b[i));
end;
end;

var
wsa: TWSAData;
sock: TSocket;
addr: TSockAddrIn;
buf: array[0..6 + 16 * 6 - 1] of Byte;
begin
if(WSAStartup($0101, wsa) <> 0)then
raise Exception.Create('WSAStartup');
sock := socket(PF_INET, SOCK_DGRAM, 0);

addr.sin_family := AF_INET;
addr.sin_port := htons(2034);
addr.sin_addr.S_addr := INADDR_ANY;

bind(sock, addr, Sizeof(addr));
recv(sock, buf, 6 + 16 * 6, 0);

dump(buf);

closesocket(sock);
if(WSACleanup <> 0)then
raise Exception.Create('WSACleanup');
{$WARNINGS OFF}
if(DebugHook <> 0)then
Readln; // IDEでの起動時は一旦停止
{$WARNINGS ON}
end.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です