Difference between revisions of "OPENHOST"
imported>Clippy m |
imported>Clippy m |
||
Line 103: | Line 103: | ||
− | ''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 (file statement)|INPUT #]] is used to read messages and [[PRINT (file statement)|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 | + | ''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 (file statement)|INPUT #]] is used to read messages and [[PRINT (file statement)|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! |
Revision as of 05:28, 10 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.
- 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
- 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
- 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