2017-08-11 04:30:44 +08:00
|
|
|
.. _sockets-echo-sample:
|
|
|
|
|
|
|
|
Socket Echo Server
|
|
|
|
##################
|
|
|
|
|
|
|
|
Overview
|
|
|
|
********
|
|
|
|
|
|
|
|
The sockets/echo sample application for Zephyr implements an IPv4 TCP echo
|
2017-08-17 16:58:52 +08:00
|
|
|
server using a BSD Sockets compatible API. The purpose of this sample is to
|
|
|
|
show how it's possible to develop a sockets application portable to both
|
|
|
|
POSIX and Zephyr. As such, it is kept minimal and supports only IPv4 and TCP.
|
2017-08-11 04:30:44 +08:00
|
|
|
|
|
|
|
The source code for this sample application can be found at:
|
2019-03-09 06:21:37 +08:00
|
|
|
:zephyr_file:`samples/net/sockets/echo`.
|
2017-08-11 04:30:44 +08:00
|
|
|
|
|
|
|
Requirements
|
|
|
|
************
|
|
|
|
|
2019-02-19 16:42:07 +08:00
|
|
|
- :ref:`networking_with_host`
|
2017-08-11 04:30:44 +08:00
|
|
|
- or, a board with hardware networking
|
|
|
|
|
|
|
|
Building and Running
|
|
|
|
********************
|
|
|
|
|
|
|
|
Build the Zephyr version of the sockets/echo application like this:
|
|
|
|
|
2017-11-10 18:25:45 +08:00
|
|
|
.. zephyr-app-commands::
|
|
|
|
:zephyr-app: samples/net/sockets/echo
|
|
|
|
:board: <board_to_use>
|
|
|
|
:goals: build
|
|
|
|
:compact:
|
2017-08-11 04:30:44 +08:00
|
|
|
|
|
|
|
``board_to_use`` defaults to ``qemu_x86``. In this case, you can run the
|
|
|
|
application in QEMU using ``make run``. If you used another BOARD, you
|
|
|
|
will need to consult its documentation for application deployment
|
|
|
|
instructions. You can read about Zephyr support for specific boards in
|
|
|
|
the documentation at :ref:`boards`.
|
|
|
|
|
|
|
|
After the sample starts, it expects connections at 192.0.2.1, port 4242.
|
|
|
|
The easiest way to connect is:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ telnet 192.0.2.1 4242
|
|
|
|
|
|
|
|
After a connection is made, the application will echo back any line sent
|
|
|
|
to it. The application implements a single-threaded server using blocking
|
|
|
|
sockets, and thus can serve only one client connection at time. After the
|
|
|
|
current client disconnects, the next connection can proceed.
|
|
|
|
|
|
|
|
Running application on POSIX Host
|
|
|
|
=================================
|
|
|
|
|
|
|
|
The same application source code can be built for a POSIX system, e.g.
|
2017-08-17 16:58:52 +08:00
|
|
|
Linux. (Note: if you look at the source, you will see that the code is
|
|
|
|
the same except the header files are different for Zephyr vs POSIX.)
|
2017-08-11 04:30:44 +08:00
|
|
|
|
|
|
|
To build for a host POSIX OS:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ make -f Makefile.posix
|
|
|
|
|
|
|
|
To run:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ ./socket_echo
|
|
|
|
|
|
|
|
To test:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ telnet 127.0.0.1 4242
|
|
|
|
|
|
|
|
As can be seen, the behavior of the application is the same as the Zephyr
|
|
|
|
version.
|
2017-10-26 07:57:59 +08:00
|
|
|
|
|
|
|
Running on cc3220sf_launchxl
|
|
|
|
============================
|
|
|
|
|
|
|
|
See the note on Provisioning and Fast Connect in :ref:`cc3220sf_launchxl`.
|
|
|
|
|
|
|
|
After having connected to an Access Point using the sample WiFi shell,
|
|
|
|
the IP address will be printed to the console upon running this echo
|
|
|
|
application.
|
|
|
|
|
|
|
|
Proceed to test as above.
|
|
|
|
|