OPENHOST

From QB64 Wiki
Revision as of 05:28, 10 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.
  • Valid handles 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 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 incoming messages to all clients
IF Chatters(i) THEN
INPUT #Chatters(i), message$
IF message$ <> "" THEN
FOR p = 1 TO numclients
IF Chatters(p) THEN PRINT #Chatters(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 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


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: _OPENCONNECTION, _OPENCLIENT, _CONNECTED, _CONNECTIONADDRESS


Navigation:

Go to Keyword Reference - Alphabetical

Go to Keyword Reference - By usage