92 lines
2.7 KiB
Plaintext
92 lines
2.7 KiB
Plaintext
{$X+,V-,B-}
|
|
program RecHello;
|
|
|
|
{ Simple IPX demonstration program. Run this program on 1 workstation,
|
|
run S_HELLO on another. S_HELLO will send "hello world" messages,
|
|
this workstation will receive them.
|
|
|
|
Polls the ECB until a packet is received. No ESR used. }
|
|
|
|
uses crt,nwMisc,nwIPX;
|
|
|
|
CONST IOSocket=$5678;
|
|
|
|
Var ReceiveEcb:Tecb;
|
|
IpxHdr:TipxHeader;
|
|
socket:word;
|
|
buf:array[1..546] of byte;
|
|
t:byte;
|
|
w:word;
|
|
s:string;
|
|
ReceivedBufLen:word;
|
|
begin
|
|
IF NOT IpxInitialize
|
|
then begin
|
|
writeln('Ipx needs to be installed.');
|
|
halt(1);
|
|
end;
|
|
socket:=IOSocket;
|
|
IF NOT IPXopenSocket(Socket,SHORT_LIVED_SOCKET)
|
|
then begin
|
|
writeln('IPXopenSocket returned error# ',nwIPX.result);
|
|
halt(1);
|
|
end;
|
|
|
|
Repeat
|
|
{ Empty receive buffer (ReceiveEcb.fragment[2].address^) }
|
|
FillChar(buf,546,#0);
|
|
|
|
{ Setup ECB and IPX header }
|
|
IPXsetupListenECB(NIL,IOsocket,@buf,546,
|
|
IpxHdr,ReceiveEcb);
|
|
IPXListenForPacket(ReceiveECB);
|
|
|
|
{ Poll InUse flag until a packet was received }
|
|
while ReceiveECB.InUseFlag<>0
|
|
do IPXrelinquishControl;
|
|
|
|
Case ReceiveECB.CompletionCode OF
|
|
$00:begin { Dump received bytes.. }
|
|
Write('Data received : ');
|
|
ReceivedBufLen:=swap(IpxHdr.length)-SizeOf(TipxHeader);
|
|
for t:=1 to ReceivedBufLen
|
|
do write(chr(buf[t]));
|
|
writeln;
|
|
end;
|
|
$FC:Writeln('The listen request has been canceled.');
|
|
{ impossible, as the cancelation has to be done by this program, and it doesn't }
|
|
$FD:Writeln('Packet overflow error.');
|
|
{ 0 fragments, or receiving buffer too small. }
|
|
$FF:Writeln('The socket is closed.');
|
|
{ Impossible. The socket is definitely open. See above. }
|
|
end;
|
|
|
|
{ Now we're going to squeeze all information out of the IpxHdr }
|
|
writeln('*IPX header info*');
|
|
writeln('-total length : ',swap(IpxHdr.length):0);
|
|
writeln('-data length : ',swap(IpxHdr.Length)-SizeOf(TipxHeader));
|
|
writeln('-number of hops: ',(IpxHdr.TransportControl AND $0F):0);
|
|
write('-sending adress: [');
|
|
for t:=1 to 4
|
|
do write(HexStr(IpxHdr.source.net[t],2));
|
|
write('|');
|
|
for t:=1 to 6
|
|
do write(HexStr(IpxHdr.source.node[t],2));
|
|
write('|');
|
|
writeln(HexStr(swap(IpxHdr.source.socket),4),']');
|
|
write('-destined for : [');
|
|
for t:=1 to 4
|
|
do write(HexStr(IpxHdr.destination.net[t],2));
|
|
write('|');
|
|
for t:=1 to 6
|
|
do write(HexStr(IpxHdr.destination.node[t],2));
|
|
write('|');
|
|
writeln(HexStr(swap(IpxHdr.destination.socket),4),']');
|
|
|
|
writeln;
|
|
UNTIL keypressed;
|
|
|
|
IF NOT IPXcloseSocket(IOsocket)
|
|
then writeln('IPXcloseSocket returned error# ',nwIPX.result);
|
|
|
|
end. |