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.