Difference between revisions of "OPENHOST"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>Clippy
m
Line 36: Line 36:
  
 
:[[ELSE]] ' "if client" alternative to open a new Host
 
:[[ELSE]] ' "if client" alternative to open a new Host
::: ' no host found, so begin new host
 
 
::[[PRINT]] "[No existing host found]"
 
::[[PRINT]] "[No existing host found]"
::host = [[_OPENHOST]]("TCP/IP:7319")
+
::host = [[_OPENHOST]]("TCP/IP:7319") ' no host found, so begin new host
 
::IF host THEN
 
::IF host THEN
 
:::[[_TITLE]] "Host - Mini Messenger"
 
:::[[_TITLE]] "Host - Mini Messenger"

Revision as of 02:33, 9 October 2009

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