mirror of
https://github.com/QB64Official/qb64.git
synced 2024-09-28 11:17:47 +00:00
96 lines
3.6 KiB
Text
96 lines
3.6 KiB
Text
{{DISPLAYTITLE:_OPENCLIENT}}
|
|
The [[_OPENCLIENT]] function connects to a Host on the Internet as a Client and returns the Client status handle.
|
|
|
|
|
|
{{PageSyntax}}
|
|
: {{Parameter|clientHandle&}} = [[_OPENCLIENT]]('''"TCP/IP:8080:12:30:1:10"''')
|
|
|
|
|
|
|
|
{{PageDescription}}
|
|
* An [[ERROR Codes|Illegal Function Call]] error will be triggered if the function is called with a string argument of the wrong syntax.
|
|
* Connects to a host somewhere on the internet as a client.
|
|
* Valid {{Parameter|clientHandle&}} values are negative. 0 means that the connection failed. Always check that the handle returned is not 0.
|
|
* [[CLOSE]] client_handle closes the client. A failed handle of value 0 does not need to be closed.
|
|
|
|
|
|
{{PageExamples}}
|
|
''Example 1:'' Attempting to connect to a local host(your host) as a client. A zero return indicates failure.
|
|
{{CodeStart}}
|
|
|
|
client = {{Cl|_OPENCLIENT}}("TCP/IP:7319:localhost")
|
|
{{Cl|IF...THEN|IF}} client {{Cl|THEN}}
|
|
{{Cl|PRINT}} "[Connected to " + {{Cl|_CONNECTIONADDRESS}}(client) + "]"
|
|
{{Cl|ELSE}} {{Cl|PRINT}} "[Connection Failed!]"
|
|
{{Cl|END IF}} '' ''
|
|
|
|
{{CodeEnd}}
|
|
:'''NOTE:''' Try a valid TCP/IP port setting to test this routine!
|
|
|
|
|
|
''Example 2:'' Using a "raw" Download function to download the QB64 bee image and displays it.
|
|
{{CodeStart}}
|
|
'' ''
|
|
'replace the fake image address below with a real image address you want to download
|
|
{{Cl|IF...THEN|IF}} Download("www.qb64.org/qb64.png", "qb64logo.png", 10) {{Cl|THEN}} ' timelimit = 10 seconds
|
|
{{Cl|SCREEN}} {{Cl|_LOADIMAGE}}("qb64logo.png",32)
|
|
{{Cl|ELSE}}: {{Cl|PRINT}} "Couldn't download image."
|
|
{{Cl|END IF}}
|
|
{{Cl|SLEEP}}
|
|
{{Cl|SYSTEM}}
|
|
' ---------- program end -----------
|
|
|
|
{{Cl|FUNCTION}} Download (url$, file$, timelimit) ' returns -1 if successful, 0 if not
|
|
url2$ = url$
|
|
x = {{Cl|INSTR}}(url2$, "/")
|
|
{{Cl|IF...THEN|IF}} x {{Cl|THEN}} url2$ = {{Cl|LEFT$}}(url$, x - 1)
|
|
client = {{Cl|_OPENCLIENT}}("TCP/IP:80:" + url2$)
|
|
{{Cl|IF...THEN|IF}} client = 0 {{Cl|THEN}} {{Cl|EXIT FUNCTION}}
|
|
e$ = {{Cl|CHR$}}(13) + {{Cl|CHR$}}(10) ' end of line characters
|
|
url3$ = {{Cl|RIGHT$}}(url$, {{Cl|LEN}}(url$) - x + 1)
|
|
x$ = "GET " + url3$ + " HTTP/1.1" + e$
|
|
x$ = x$ + "Host: " + url2$ + e$ + e$
|
|
{{Cl|PUT (TCP/IP statement)|PUT}} #client, , x$
|
|
t! = {{Cl|TIMER}} ' start time
|
|
{{Cl|DO}}
|
|
{{Cl|_DELAY}} 0.05 ' 50ms delay (20 checks per second)
|
|
{{Cl|GET (TCP/IP statement)|GET}} #client, , a2$
|
|
a$ = a$ + a2$
|
|
i = {{Cl|INSTR}}(a$, "Content-Length:")
|
|
{{Cl|IF...THEN|IF}} i {{Cl|THEN}}
|
|
i2 = {{Cl|INSTR}}(i, a$, e$)
|
|
{{Cl|IF...THEN|IF}} i2 {{Cl|THEN}}
|
|
l = {{Cl|VAL}}({{Cl|MID$}}(a$, i + 15, i2 - i -14))
|
|
i3 = {{Cl|INSTR}}(i2, a$, e$ + e$)
|
|
{{Cl|IF...THEN|IF}} i3 {{Cl|THEN}}
|
|
i3 = i3 + 4 'move i3 to start of data
|
|
{{Cl|IF...THEN|IF}} ({{Cl|LEN}}(a$) - i3 + 1) = l {{Cl|THEN}}
|
|
{{Cl|CLOSE}} client ' CLOSE CLIENT
|
|
d$ = {{Cl|MID$}}(a$, i3, l)
|
|
fh = {{Cl|FREEFILE}}
|
|
{{Cl|OPEN}} file$ {{Cl|FOR}} {{Cl|OUTPUT}} {{Cl|AS}} #fh: {{Cl|CLOSE}} #fh ' erase existing file?
|
|
|
|
{{Cl|OPEN}} file$ {{Cl|FOR}} {{Cl|BINARY}} {{Cl|AS}} #fh
|
|
{{Cl|PUT}} #fh, , d$
|
|
{{Cl|CLOSE}} #fh
|
|
Download = -1 'indicates download was successfull
|
|
{{Cl|EXIT FUNCTION}}
|
|
{{Cl|END IF}} ' availabledata = l
|
|
{{Cl|END IF}} ' i3
|
|
{{Cl|END IF}} ' i2
|
|
{{Cl|END IF}} ' i
|
|
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|TIMER}} > t! + timelimit ' (in seconds)
|
|
{{Cl|CLOSE}} client
|
|
{{Cl|END FUNCTION}} '' ''
|
|
{{CodeEnd}}
|
|
|
|
|
|
|
|
{{PageSeeAlso}}
|
|
* [[_OPENHOST]], [[_OPENCONNECTION]]
|
|
* [[_CONNECTED]], [[_CONNECTIONADDRESS$]]
|
|
* [[Email Demo]], [[Inter-Program Data Sharing Demo]]
|
|
* [[Downloading Files]]
|
|
|
|
|
|
{{PageNavigation}}
|