File: pnet.m

package info (click to toggle)
psychtoolbox-3 3.0.19.14.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 86,796 kB
  • sloc: ansic: 176,245; cpp: 20,103; objc: 5,393; sh: 2,753; python: 1,397; php: 384; makefile: 193; java: 113
file content (234 lines) | stat: -rw-r--r-- 11,592 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
% PNET    - IO-function for TCP and UDP comunation in matlab.
%
% 
%     This function can be called with different options/commands to operate on
%     tcp/udp/ip connection in matlab. It supports data transfer with
%     different data types and byte orders. The function is implemented as an
%     MEX-file that needs to be 
%
% General syntax
% ==============
%
%        pnet('command',....)          or         pnet command  ....
%   
%        ppet(con,'command',....)      or         pnet con command ....
%  
%        ...where 'command' is a string specifying what to do. "con" is an 
%        connection handler holding a number that refers to an already open
%        connection/socket. In the cases where "con" is specified before
%        'command' is the commands associated to operate on that connection/
%        socket. Connection handler number (and some other numbers like size
%        values) can be specified as either a scalar value or a string
%        containing the scalar number.
%  
% Commands for TCP connections
% ============================
%  
%  con=pnet('tcpconnect','hostname',port)
%  
%     Creates tcp/ip connection to the specified 'hostname' and port. On error
%     it returns -1, on success it returns a conection handler as an integer
%     number >=0. This function call is used to act as a "tcp-client".
%     This function is alway nonblocking unless their is some troubles with
%     namelookup that can block interpretation for a while.
%  
%  sockcon=pnet('tcpsocket',port)
%  
%     Creates a local tcpsocket and bind port-number "port" to it. On fail
%     it rerurns -1, on success it returns a connection handler. To fetch
%     remote connection connecting to this socket use pnet(sockcon,'tcplisten')
%     
%  con=pnet(sockcon,'tcplisten', ['noblock'] )
%     
%     If some remote tcp-connection has connected to the socket "sockcon" this
%     functions returns a handler to that tcp connection. On non available
%     remote connection or error it returns -1. Unless the option 'noblock' is
%     specified or the readtimeout value (default to inf ) is reached it blocks
%     until a remote connection is established.
%     
%  elements=pnet(con,'write', data [,swapping])
%     
%     Writes all elements of the matlab array "data" to connection "con". 
%     Supported datatypes are: char, double, single, int8 int16, int32,
%     uint8, uint16  and uint32. Arrays of datatype char is written as single
%     bytes, all other datatypes are written as it matlabsize. By default 
%     the bytes are swapped to network byte order unless the swapping option
%     is specified. Swapping options:
%     'native'  no swapping use the computers native byte order.
%     'swap'    allways swap byte order.
%     'network' uses network byte order (little endian) and it is default.
%     'intel'   use intel CPUs byte order (big endian).
%     This operation blocks until writetimeout (is by default inf) is reached
%     or all elements are transfered. Returns number of elements successfull
%     written.     
%     This command can also be used with UDP packets, se the UDP section.
%
%  pnet(con,'printf', 'format',.....)
%     
%     Prints a formated string to the connection "con". SPRINTF is used to
%     process format string and following arguments. Se help on SPRINTF for more
%     information. It block until writetimeout and returns number of characters
%     succesfull written.
%     This command can also be used with UDP packets, se the UDP section.
%     
%  data=pnet(con,'read' [,size] [,datatype] [,swapping] [,'view'] [,'noblock'])
%     
%     Reads an array of elements from a connection. Unless option 'noblock' is
%     used the operation blocks until timeout is reached (by default inf), the
%     specified "size" is reached or the connection is disconnected by peer.
%     Specified "size" (by default 65536) can be a scalar or a vector of
%     specifying dimentions length for the multidimentional array to read.
%     If size is a scalar i.e. [10] it return 0 to 10 elements in a rowvector
%     depening on available elements. If size is a vector i.e. [1 10] or [5 5 5]
%     it returns an array if all elements is available, if not, an empty array
%     is returned. The datatype option is a string containing the name of the
%     datatype, if not specified its by default 'char'. Supported datatypes is
%     the same as for the 'write' command.  The option named "swapping" is
%     is the same for the 'read' command. The option 'view' gives an "preview"
%     of whats available, all data is left in the read buffer. In combination
%     with 'noblock' this is a powerfull command to check how much and whats
%     available at the moment without blocking.
%     This command can also be used with UDP packets, se the UDP section.
%     
%  str=pnet(con,'readline' [,limitsize] [,'view'] [,'noblock'])
%     
%     This commands works like 'read' but it reads a string of characters
%     until the newline character (code=10) are reached.
%     It returns the string without the newline character (or if exist just
%     before, the carage return character code=13 ). If the character line
%     is longer then the "limitsize" the line is splited at that length.
%     The default value for limitsize is 65536.
%     The function blocks unless a full line of characters are available or
%     'noblock' is specified until readtimeout is reached. The 'view'
%     option also leaves the returned characters in the read buffer.
%     This command can also be used with UDP packets, se the UDP section.
%     
%  ret=pnet(con,'readtofile','filename'[,bytes][,'view'][,'noblock'][,'append'])
%     
%     Reads data of specified number of "bytes" to a file 'filename'. It
%     returns successful number of bytes moved from the connection to the file.
%     If the option string 'append' is specified the data will be appended
%     th the end of the file, otherwise the file will be overwritten.
%     'view', 'noblock' and timeout behaves as earlier described for read
%     operations.
%     This command can also be used with UDP packets, se the UDP section.
%     
%  ret=pnet(con,'writefromfile','filename'[[,start] ,len])
%
%     Read data from a file and write it on the connection. All of the
%     file will be transmitted of not "start" and "len" specifies a segment.
%     The function returns -1 on fail.
%     This command can also be used with UDP packets, se the UDP section.
%     
%  stat=pnet(con,'status')
%     
%     This returns a number telling about the status of a connection/socket.
%     It is a different number for each type of connection or socket se
%     #define's in top of pnet.c. The most important status is when
%     peer has disconnect the status value is 0 else it is >0.
%     This command can also be used with UDP packets, se the UDP section.
%
%  stat=pnet(con,'setreadtimeout',sec)
%     
%     The value "sec" specifies how long read and listen commands blocks before
%     it timeouts. The unit is seconds specified as a floting point which means
%     that i.e. 0.1 can be specified for a maximum of 0.1 seconds blocking.
%     Setting readtimeout to 0 is the same as adding the 'noblock' option to
%     all followinging 'read' or 'listen' calls. 
%     This command can also be used with UDP packets, se the UDP section.
%
%  stat=pnet(con,'setwritetimeout',sec)
%     
%     The value "sec" specifies how long the 'write' commands blocks before
%     it timeouts. The unit is seconds specified as a floting point which means
%     that i.e. 0.1 can be specified for a maximum of 0.1 seconds blocking.
%     This command can also be used with UDP packets, se the UDP section.
%     
%  [ip,port]=pnet(con,'gethost')
%     
%     This command call returns ipnumber and port number for the remote host
%     that is (latest) associated with the connection/socket. After 'tcplisten'
%     you can get the the clients ip and port numbers. After a 'tcpconnect'
%     you can get the ip and port that you connected to. 
%     For UDP sockets this gives remote ip and and port for the latest operation
%     of 'readpacket', 'writepacket' (if not connected) or 'udpconnect'.
%
%  pnet(con,'close')
%
%     Closes a tcpconnection, tcpsocket or udpsocket. This comand must be called
%     after ending use of any socket or connection even, if its detected that the
%     connection is broken from the remote host side. 
%     This command should also be used with UDP sockets, se the UDP section.
%
%  pnet('closeall')
%
%     Closes all pnet connections/sockets used in this matlab session.
%
% UDP packets
% ===========
%  
%         With PNET it's possible send and receive UDP packets. Same read/write
%         commands can be used as for with TCP connection with the difference
%         that the operation is alway nonblocking and data is stored in the 
%         read/write buffer in memory. With  pnet(sock,'writepacket'...) can the
%         created UDP packet in the write buffer be sent. And with 
%         pnet(sock,'readpacket') a new packet can be recived before reading its
%         contents with read commands. The limitation is how big UDP packets
%         your network can transmitt. But about 65500 bytes is maximum.
%     
%  sock=pnet('udpsocket',port);
%     
%     Creates a UDP socket and binds it to an UDP port. On this socket can you
%     recive UDP packets destinated to this UDP port, and send UDP packets with
%     this sockat as source adress. Retruns -1 on fail or a handler >=0 on
%     success. In this sockets write buffer you can create a UDP packet that
%     is later sent with the 'writepacket' command. 
%     
%  pnet(sock,'udpconnect','hostname',port);
%     
%     With this command you can connect a destination host and port to the the
%     UDP socket causing that the 'writepacket' commands should not have any
%     'hostname' and port arguments supplied.
%     
%  pnet(sock,'writepacket' [,'hostname',port]);
%     
%     Sends contents of the sockets write buffer as a UDP packet. If the UDP
%     socket is not connected 'hostname' and port must be supplied, if connected
%     the arguments is ignored.
%     
%  size=pnet(sock,'readpacket'[,maxsize][,'noblock']);
%     
%     Reads next incoming UDP packet on UDP socket "sock".  Unless 'noblock'
%     is supplied as option it block until readtimeout or next UDP packet is
%     received. The optional argument "maxsize" limits the size of the packet.
%     The packet is stored in the sockets read buffer and can then be readed
%     from the buffer with same commands as for TCP connections. When reciving
%     a new packet old non used data from the last packet is discarded.
%
%  General alternative syntax
%  ==========================
%
%       pnet 1 write Hello_World
%     
%    is the same as    
%     
%       pnet(1,'write','Hello_World')
%     
%     Numbers like connection handlers and port-numbers can be specified
%     as strings in most cases. This syntax should generaly work for all
%     variants of calls and is usefull and easy to type when experimenting
%     interactively with tcp connection and udp packets from the matlab
%     prompt.
%
%
%   SE ALSO: PNET_REMOTE, PNET_PUTVAR PNET_GETVAR, WEBGET_DEMO, POPMAIL_DEMO
%            UDP_PLOTTER_DEMO, UDP_SEND_DEMO, WEBSERVER_DEMO
%
%
%   GOOD LUCK and HAVE FUN!  :-)
%
%       Peter Rydesaeter, 
%       Mitthoegskolan(Mid Sweden University) campus Oestersund, SWEDEN
%

error('You need to compile pnet.c to a mex-file for your platform. Read the header of pnet.c');