INSTALL@lib$+"SOCKLIB"
PROC_initsockets
host$=FN_gethostname
PRINThost$
hostent%=FN_sethost(host$)
hostip%=!!hostent%!12
PRINTFNipaddrs(hostip%)
ON CLOSE PROC_exitsockets : QUIT : REM important
ON ERROR PROC_exitsockets : REPORT : END : REM important
PROCfindname
dest$=host$ : REM if testing locally
REPEAT
socnum%=FN_tcpconnect(dest$,"12325")
UNTILsocnum%>0
PRINT"Peer name: "FN_getpeername(socnum%)
PRINT"Connection established: "socnum%
DIMbuffer%255
PRINT "Sending bytes"
try%=0
REPEAT
?buffer%=48+try% : REM Printable bytes
PRINT try% : WAIT 25 : REM
success%=FN_writesocket(socnum%,buffer%,1)
try%+=1
UNTILtry%=10
success%=FN_writelinesocket(socnum%,"") : REM newline
PRINT "Sending lines"
try%=0
REPEAT
PRINT try% : WAIT 25 : REM
success%=FN_writelinesocket(socnum%,"Hello"+STR$(try%))
try%+=1
UNTILtry%=10
PROC_closesocket(socnum%) : REM close before exit
PRINT "Finished"
PROC_exitsockets
END
:
DEFFNipaddrs(addr%)
=STR$(addr%AND255)+"."+STR$(addr%>>>8AND255)+"."+STR$(addr%>>>16AND255)+"."+STR$(addr%>>>24AND255)
:
DEFPROCfindname
SYS"LoadLibrary","dnsapi.dll"TOdnsapi%
SYS"GetProcAddress",dnsapi%,"DnsQuery_A"TO`DnsQuery`
SYS"GetProcAddress",dnsapi%,"DnsRecordListFree"TO`DnsRecordListFree`
DIMdnsr{pNext%,pName%,wType{l&,h&},wDataLength{l&,h&},dwFlags%,dwTtl%,dwReserved%,dwData%}
query$="Computer2"
SYS`DnsQuery`,query$,1,1,0,dnsr{},0
rr%=dnsr.pNext%
WHILEdnsr.pNext%
!(^dnsr{}+4)=dnsr.pNext%
PRINT$$dnsr.pName% " ",FNipaddrs(dnsr.dwData%)
ENDWHILE
dest$=FNipaddrs(dnsr.dwData%)
SYS`DnsRecordListFree`,rr%,0
SYS"FreeLibrary",dnsapi%
ENDPROC
INSTALL@lib$+"SOCKLIB"
PROC_initsockets
host$=FN_gethostname
PRINThost$
hostent%=FN_sethost(host$)
hostip%=!!hostent%!12
PRINTFNipaddrs(hostip%)
ON CLOSE PROC_exitsockets : QUIT : REM important
ON ERROR PROC_exitsockets : REPORT : END : REM important
PROCfindname
PRINT"Checking connection"
REPEAT
socnum%=FN_tcplisten(host$,"12325")
IF socnum%<0 THEN PRINT FN_socketerror
UNTILsocnum%>0
PRINT"Listening"
REPEAT
success%=FN_check_connection(socnum%)
WAIT 0
UNTILsuccess%>0
PRINT "Connected to "FN_getpeername(success%)
REM buffer content need to be parsed
DIMbuffer%255
REPEAT
inbyte%=FN_readsocket(success%,buffer%,255)
IF inbyte%>0 THEN
PRINT "Received ";inbyte%;" bytes"
FOR I%=0 TO inbyte%-1
PRINT CHR$buffer%?I%;
NEXT
ELSE
WAIT 0
ENDIF
UNTIL inbyte%=-1
PRINT "Disconnected"
PROC_exitsockets
END
:
DEFFNipaddrs(addr%)
=STR$(addr%AND255)+"."+STR$(addr%>>>8AND255)+"."+STR$(addr%>>>16AND255)+"."+STR$(addr%>>>24AND255)
:
DEFPROCfindname
SYS"LoadLibrary","dnsapi.dll"TOdnsapi%
SYS"GetProcAddress",dnsapi%,"DnsQuery_A"TO`DnsQuery`
SYS"GetProcAddress",dnsapi%,"DnsRecordListFree"TO`DnsRecordListFree`
DIMdnsr{pNext%,pName%,wType{l&,h&},wDataLength{l&,h&},dwFlags%,dwTtl%,dwReserved%,dwData%}
query$="Computer1"
SYS`DnsQuery`,query$,1,1,0,dnsr{},0
rr%=dnsr.pNext%
WHILEdnsr.pNext%
!(^dnsr{}+4)=dnsr.pNext%
PRINT$$dnsr.pName% " ",FNipaddrs(dnsr.dwData%)
ENDWHILE
dest$=FNipaddrs(dnsr.dwData%)
SYS`DnsRecordListFree`,rr%,0
SYS"FreeLibrary",dnsapi%
ENDPROC