Example application that implements a simple TCP server on top of the NetworkAPI

Dependencies:   mbed mbed-rtos EthernetInterface NetworkAPI

Committer:
NegativeBlack
Date:
Thu Sep 27 09:35:46 2012 +0000
Revision:
10:9e8d5928537a
Parent:
9:a4c85bea2d77
Child:
11:90554d22ade5
Updated NetworkAPI library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
donatien 0:bb128f0e952f 2 #include "EthernetInterface.h"
donatien 0:bb128f0e952f 3
NegativeBlack 9:a4c85bea2d77 4 #include "NetworkAPI/buffer.hpp"
NegativeBlack 9:a4c85bea2d77 5 #include "NetworkAPI/tcp/socket.hpp"
NegativeBlack 9:a4c85bea2d77 6 using namespace network;
NegativeBlack 9:a4c85bea2d77 7
NegativeBlack 10:9e8d5928537a 8 #define PORT 1234
NegativeBlack 10:9e8d5928537a 9 #define MAX_PENDING 1
donatien 0:bb128f0e952f 10
NegativeBlack 6:33b57f606f2b 11 int
NegativeBlack 6:33b57f606f2b 12 main()
NegativeBlack 6:33b57f606f2b 13 {
NegativeBlack 6:33b57f606f2b 14 EthernetInterface interface;
NegativeBlack 6:33b57f606f2b 15 interface.init();
NegativeBlack 6:33b57f606f2b 16 interface.connect();
NegativeBlack 6:33b57f606f2b 17 printf("IP Address is %s\n\r", interface.getIPAddress());
NegativeBlack 9:a4c85bea2d77 18
NegativeBlack 9:a4c85bea2d77 19 tcp::Socket server;
NegativeBlack 10:9e8d5928537a 20 tcp::Socket client;
NegativeBlack 10:9e8d5928537a 21
NegativeBlack 10:9e8d5928537a 22 Buffer buffer(256);
NegativeBlack 8:d55cac25e637 23
NegativeBlack 10:9e8d5928537a 24 if (server.open() < 0) {
NegativeBlack 10:9e8d5928537a 25 printf("Could not open server socket.\n\r");
NegativeBlack 10:9e8d5928537a 26 return -1;
NegativeBlack 10:9e8d5928537a 27 }
NegativeBlack 8:d55cac25e637 28
NegativeBlack 10:9e8d5928537a 29 if (server.bind(PORT) < 0) {
NegativeBlack 10:9e8d5928537a 30 printf("Could not bind server socket to port '%d'.\n\r", PORT);
NegativeBlack 10:9e8d5928537a 31 return -1;
NegativeBlack 8:d55cac25e637 32 }
donatien 0:bb128f0e952f 33
NegativeBlack 10:9e8d5928537a 34 if (server.listen(MAX_PENDING) < 0) {
NegativeBlack 10:9e8d5928537a 35 printf("Could not put server socket into listening mode.\n\r");
NegativeBlack 10:9e8d5928537a 36 return -1;
NegativeBlack 10:9e8d5928537a 37 }
NegativeBlack 10:9e8d5928537a 38
NegativeBlack 10:9e8d5928537a 39 while (server.getStatus() == tcp::Socket::Listening) {
NegativeBlack 10:9e8d5928537a 40 if (server.accept(client) < 0) {
NegativeBlack 10:9e8d5928537a 41 printf("Warning: failed to accept connection.\n\r");
NegativeBlack 10:9e8d5928537a 42 continue;
NegativeBlack 9:a4c85bea2d77 43 }
NegativeBlack 10:9e8d5928537a 44
NegativeBlack 10:9e8d5928537a 45 printf("Client connected '%s:%d'.\n\r",
NegativeBlack 10:9e8d5928537a 46 client.getRemoteEndpoint().getAddress().toString().c_str(),
NegativeBlack 10:9e8d5928537a 47 client.getRemoteEndpoint().getPort());
NegativeBlack 8:d55cac25e637 48
NegativeBlack 10:9e8d5928537a 49 while (client.getStatus() == tcp::Socket::Connected) {
NegativeBlack 10:9e8d5928537a 50 buffer.flush();
NegativeBlack 8:d55cac25e637 51
NegativeBlack 10:9e8d5928537a 52 switch (client.read(buffer)) {
NegativeBlack 10:9e8d5928537a 53 case -1:
NegativeBlack 10:9e8d5928537a 54 printf("Warning: failed to read data from client.\n\r");
NegativeBlack 9:a4c85bea2d77 55 break;
NegativeBlack 8:d55cac25e637 56
NegativeBlack 10:9e8d5928537a 57 case 0:
NegativeBlack 10:9e8d5928537a 58 printf("Connection closed.\n\r");
NegativeBlack 9:a4c85bea2d77 59 break;
NegativeBlack 9:a4c85bea2d77 60
NegativeBlack 9:a4c85bea2d77 61 default:
NegativeBlack 10:9e8d5928537a 62 printf("Received %d bytes.\n\r%s\r", buffer.length(), (char *)buffer.data());
NegativeBlack 10:9e8d5928537a 63 continue;
NegativeBlack 9:a4c85bea2d77 64 }
NegativeBlack 10:9e8d5928537a 65
NegativeBlack 10:9e8d5928537a 66 client.shutdown();
NegativeBlack 10:9e8d5928537a 67 client.close();
NegativeBlack 9:a4c85bea2d77 68 }
NegativeBlack 10:9e8d5928537a 69 }
NegativeBlack 6:33b57f606f2b 70 }