The '''PUT #'''  TCP/IP statement sends unformatted(raw) data to an open connection using a user's handle.


{{PageSyntax}}
:: '''PUT ''#handle'', , ''data'' '''


{{Parameters}}
* The ''handle'' value is returned by the [[_OPENCLIENT]], [[_OPENHOST]] or [[_OPENCONNECTION]] '''QB64''' functions.
* The ''data'' can be any variable type value. Literal values are not allowed.


&lt;center&gt;'''Communicating using unformatted/raw streamed data:'''&lt;/center&gt;
* Benefit: Communicate with any TCP/IP compatible protocol (eg. FTP, HTTP, web-pages, etc)
* Disadvantage: Streamed data has no 'message length' as such, just a continuous bunch of bytes all in a row. Some messages get fragmented and parts of messages can (and often do) arrive at different times. 
* The position parameter(between the commas) is not used in TCP/IP statements as all data is streamed consecutively.
&lt;center&gt;'''Your program MUST cater for these situations manually.'''&lt;/center&gt;

{{WhiteStart}}''Example: string variable b$'s length is adjusted to the number of bytes read.''

 {{Cb|PUT (TCP/IP statement)|PUT #}}client, , a$ 'sends data (this could be a string, variable array, user defined type, etc)
 {{Cb|GET (TCP/IP statement)|GET #}}openconn, , b$ 'reads any available data into variable length string b$ 
 {{Cb|GET (TCP/IP statement)|GET #}}openconn, , x% 'reads 2 bytes of data as an integer value.
{{WhiteEnd}}
: ''Explanation:''  Checking [[EOF]](o) is unnecessary. If 2 bytes are available, they are read into x%, if not then nothing is read and [[EOF]](o) will return -1




''See the example in [[_OPENCLIENT]]''


''See also:'' 
* [[GET (TCP/IP statement)]], [[PRINT (TCP/IP statement)]], [[INPUT (TCP/IP statement)]], [[PUT|PUT #]]
* [[_OPENCLIENT]], [[_OPENHOST]], [[_OPENCONNECTION]] 
* [[IP Configuration]]


{{PageNavigation}}