OPENHOST

From QB64 Wiki
Revision as of 02:30, 9 October 2009 by imported>Clippy
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.



Syntax: 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. Use the same port number in the _OPENHOST function.
  • Valid handles are usually negative numbers.
  • 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

PRINT "Mini Messenger"
LOCATE , , 1 ' display the print cursor
' Attempt to connect to local host as a client
client = _OPENCLIENT("TCP/IP:7319:localhost")
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
' no host found, so begin new host
PRINT "[No existing host found]"
host = _OPENHOST("TCP/IP:7319")
IF host THEN
_TITLE "Host - Mini Messenger"
PRINT "[Beginning new host chat session!]"
DIM Chatters(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
Chatters(numclients) = newclient
PRINT #Chatters(numclients),"Welcome!"
END IF
FOR i = 1 TO numclients ' distribute any incoming message to all clients
IF Chatters(i) THEN
INPUT #Chatters(i), message$
IF message$ <> "" THEN
FOR k = 1 TO numclients
IF Chatters(k) THEN PRINT #Chatters(k),message$
NEXT k
END IF
END IF
NEXT i
GetMessage client
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


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 display
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




See also: _OPENCONNECTION, _OPENCLIENT, _CONNECTED


Navigation:

Go to Keyword Reference - Alphabetical

Go to Keyword Reference - By usage