You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.1 KiB
61 lines
2.1 KiB
Nanopb example "network_server"
|
|
===============================
|
|
|
|
This example demonstrates the use of nanopb to communicate over network
|
|
connections. It consists of a server that sends file listings, and of
|
|
a client that requests the file list from the server.
|
|
|
|
Example usage
|
|
-------------
|
|
|
|
user@host:~/nanopb/examples/network_server$ make # Build the example
|
|
protoc -ofileproto.pb fileproto.proto
|
|
python ../../generator/nanopb_generator.py fileproto.pb
|
|
Writing to fileproto.pb.h and fileproto.pb.c
|
|
cc -ansi -Wall -Werror -I .. -g -O0 -I../.. -o server server.c
|
|
../../pb_decode.c ../../pb_encode.c fileproto.pb.c common.c
|
|
cc -ansi -Wall -Werror -I .. -g -O0 -I../.. -o client client.c
|
|
../../pb_decode.c ../../pb_encode.c fileproto.pb.c common.c
|
|
|
|
user@host:~/nanopb/examples/network_server$ ./server & # Start the server on background
|
|
[1] 24462
|
|
|
|
petteri@oddish:~/nanopb/examples/network_server$ ./client /bin # Request the server to list /bin
|
|
Got connection.
|
|
Listing directory: /bin
|
|
1327119 bzdiff
|
|
1327126 bzless
|
|
1327147 ps
|
|
1327178 ntfsmove
|
|
1327271 mv
|
|
1327187 mount
|
|
1327259 false
|
|
1327266 tempfile
|
|
1327285 zfgrep
|
|
1327165 gzexe
|
|
1327204 nc.openbsd
|
|
1327260 uname
|
|
|
|
|
|
Details of implementation
|
|
-------------------------
|
|
fileproto.proto contains the portable Google Protocol Buffers protocol definition.
|
|
It could be used as-is to implement a server or a client in any other language, for
|
|
example Python or Java.
|
|
|
|
fileproto.options contains the nanopb-specific options for the protocol file. This
|
|
sets the amount of space allocated for file names when decoding messages.
|
|
|
|
common.c/h contains functions that allow nanopb to read and write directly from
|
|
network socket. This way there is no need to allocate a separate buffer to store
|
|
the message.
|
|
|
|
server.c contains the code to open a listening socket, to respond to clients and
|
|
to list directory contents.
|
|
|
|
client.c contains the code to connect to a server, to send a request and to print
|
|
the response message.
|
|
|
|
The code is implemented using the POSIX socket api, but it should be easy enough
|
|
to port into any other socket api, such as lwip.
|