From QB64 Wiki
Revision as of 01:15, 2 February 2010 by imported>Cyperium
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The _OPENHOST function opens a Host which listens for new connections and returns a Host status handle.


host_handle = _OPENHOST("TCP/IP:8080")


  • Creates an ILLEGAL FUNCTION CALL if called with a string argument of the wrong syntax.
  • The port used in the syntax example is 8080.
  • Valid handle values are usually negative number values.
  • If the syntax is correct but they fail to begin/connect a handle of 0 is returned.
  • Always check if the handle returned is 0 (failed) before continuing.
  • CLOSE host_handle closes the host. A failed handle value of 0 does not need to be closed.


Example: Chat program that attempts to connect as a Client. If not it attempts to become the Host.

PRINT "Mini Messenger" LOCATE , , 1 ' display the print cursor for INKEY$ client = _OPENCLIENT("TCP/IP:7319:localhost") ' Attempt to connect to local host as a client IF client THEN PRINT "[connected to " + _CONNECTIONADDRESS(client) + "]" _TITLE "Client - Mini Messenger" INPUT "Enter your name: ", myname$ PRINT #client, myname$ + " connected!" DO GetMessage client SendMessage myname$, mymessage$, client ' display current input on screen _DELAY 0.01 ' reduce CPU usage LOOP ELSE ' "if client" alternative to open a new Host PRINT "[No existing host found]" host = _OPENHOST("TCP/IP:7319") ' no host found, so begin new host IF host THEN _TITLE "Host - Mini Messenger" PRINT "[Beginning new host chat session!]" DIM Users(1 to 1000) ' array to hold other client info numclients = 0 client = _OPENCLIENT("TCP/IP:7319:localhost") IF client = 0 THEN PRINT "ERROR: could not attach host's personal client to host!" INPUT "Enter your name:", myname$ PRINT #client, myname$ + " connected!" PRINT "[Chat session active!]" DO ' host main loop newclient = _OPENCONNECTION(host) ' receive any new connection IF newclient THEN numclients = numclients + 1 Users(numclients) = newclient PRINT #Users(numclients),"Welcome!" END IF FOR i = 1 TO numclients ' distribute incoming messages to all clients IF Users(i) THEN INPUT #Users(i), message$ IF message$ <> "" THEN FOR p = 1 TO numclients IF Users(p) THEN PRINT #Users(p), message$ NEXT p END IF END IF NEXT i GetMessage client ' allow host to get messages and chat also SendMessage myname$, mymessage$, client _DELAY 0.01 ' reduce CPU usage LOOP END IF ' host PRINT "ERROR: Could not begin new host!" END IF ' if client from start SLEEP SYSTEM '.................... END OF MAIN PROGRAM ................ SUB GetMessage (client) ' get & display any new message INPUT #client, newmessage$ IF newmessage$ <> "" THEN VIEW PRINT 1 TO 23 LOCATE 23,1 PRINT newmessage$ VIEW PRINT 1 TO 24 END IF END SUB SUB SendMessage (myname$, mymessage$, client) ' simple input handler k$ = INKEY$ IF LEN(k$) THEN IF k$ = CHR$(8) AND LEN(mymessage$) <> 0 THEN mymessage$ = LEFT$(mymessage$, LEN(mymessage$) - 1) ELSE IF LEN(k$) = 1 AND ASC(k$) >= 32 THEN mymessage$ = mymessage$ + k$ END IF END IF LOCATE 24, 1: PRINT SPACE$(80); ' erase previous message displayed LOCATE 24, 1: PRINT myname$ + ": ";mymessage$; IF k$ = CHR$(13) THEN ' [Enter] sends the message IF mymessage$ = "" THEN SYSTEM ' [Enter] with no message ends program PRINT #client, myname$ + ": " + mymessage$ mymessage$ = "" END IF IF k$ = CHR$(27) THEN SYSTEM ' [Esc] key ends program END SUB

Mini Messenger [No existing host found] [Beginning new host chat session!] Enter your name:_

Explanation: The SendMessage SUB program controls the program exit unless both Client and Host fail. Entering no message and hitting [Enter] or pressing the [Esc]] key closes the program. Both SUB programs allow a Client or Host to communicate with others simply. ::INPUT # is used to read messages and PRINT # is used to send messages. The client handle value is used as the port number. Keep in mind that this is just an example. A lot could be added like recording IP addresses!

See also

Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page