BCX Console Demonstration Program s128.bas

 ' --------------------------------------------------------------- 
 '   Console utility used to retrieve files from an HTTP server. 
 ' --------------------------------------------------------------- 
 ' From the book WinSock 2.0 by Lewis Napper covering programming 
 ' with sockets.      Adapted to BCX BASIC by Kevin Diggins 
 ' --------------------------------------------------------------- 
 $HEADER
 #if defined (__LCC__)
  #include <WINSOCK2.H>
 #endif
 $HEADER
 
 $LIBRARY <WSOCK32.LIB> ' LINK WITH WSOCK32.LIB 
 
 #INCLUDE <fcntl.h>
 
 GLOBAL wsaData AS WSADATA
 GLOBAL wVersionRequested
 GLOBAL nRet
 
 wVersionRequested = MAKEWORD(1,1)
 
 IF ARGC <> 3 THEN
   PRINT "Syntax : GetHTTP ServerName PathAndFileName"
   PRINT "Example: GetHTTP www.yahoo.com index.html"
   END
 END IF
 
 nRet = WSAStartup(wVersionRequested, &wsaData)
 
 IF nRet THEN
   PRINT "WSAStartup()", nRet
   WSACleanup()
   END
 END IF
 
 IF wsaData.wVersion <> wVersionRequested THEN
   PRINT "WinSock version not supported"
   WSACleanup()
   END
 END IF
 
 setmode(_fileno(stdout), _O_BINARY)
 
 GetHTTP (ARGV[1], ARGV[2])
 
 WSACleanup()
 
 SUB GetHTTP (lpServerName$, lpFileName$)
   ' ======================================= 
   DIM LOCAL  nRet
   DIM LOCAL  iaHost       AS IN_ADDR
   DIM LOCAL  lpHostEntry  AS LPHOSTENT
   DIM LOCAL  Socket       AS SOCKET
   DIM LOCAL  lpServEnt    AS LPSERVENT
   DIM LOCAL  saServer     AS SOCKADDR_IN
   DIM LOCAL  szBuffer$
   ' ======================================= 
 
   iaHost.s_addr = inet_addr(lpServerName)
 
   IF iaHost.s_addr = INADDR_NONE THEN
     lpHostEntry = gethostbyname(lpServerName$)
   ELSE
     lpHostEntry = gethostbyaddr((CHAR*)&iaHost, SIZEOF(IN_ADDR), AF_INET)
   END IF
 
   IF lpHostEntry = NULL THEN
     PRINT "Error: HOST NOT FOUND : gethostbyname()"
     END
   END IF
 
   Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
 
   IF Socket = INVALID_SOCKET THEN
     PRINT "Error: INVALID_SOCKET : socket ()"
     END
   END IF
 
   lpServEnt = getservbyname("http", "tcp")
 
   IF lpServEnt = NULL THEN
     saServer.sin_port = htons(80)
   ELSE
     saServer.sin_port = lpServEnt->s_port
   END IF
 
   saServer.sin_family = AF_INET
   saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list)
   nRet = connect(Socket, (LPSOCKADDR)&saServer, SIZEOF(SOCKADDR_IN))
 
   IF nRet = SOCKET_ERROR THEN
     PRINT "Error: SOCKET_ERROR : connect()"
     closesocket(Socket)
     END
   END IF
 
   szBuffer$ = "GET " & CHR$(13) & CHR$(10) & lpFileName$
   nRet      = send(Socket, szBuffer$, LEN(szBuffer$), 0)
 
   IF nRet = SOCKET_ERROR THEN
     PRINT "Error: SOCKET_ERROR : send()"
     closesocket(Socket)
     END
   END IF
 
   WHILE (TRUE)
     nRet = recv(Socket, szBuffer$, SIZEOF(szBuffer$), 0)
     IF nRet = SOCKET_ERROR THEN
       PRINT "Error: SOCKET_ERROR : recv()"
       EXIT LOOP
     END IF
     IF nRet = 0 THEN
       EXIT LOOP
     END IF
     PRINT szBuffer$
   WEND
   closesocket(Socket)
 END SUB

Result:


 Result not displayed for this example.