8ABELI Socket Programming

Dependencies:   mbed mbed-rtos EthernetInterface

Committer:
fpucher
Date:
Mon Mar 23 13:05:31 2020 +0000
Revision:
8:2c91833ef350
Parent:
7:a5ead1402704
8ABELI Socket Programming

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fpucher 8:2c91833ef350 1 // https://developer.mbed.org/handbook/Socket
mbed_official 0:38cbb854d85f 2 #include "mbed.h"
emilmont 1:5cebe0e38cd2 3 #include "EthernetInterface.h"
emilmont 1:5cebe0e38cd2 4
emilmont 3:36fd3cfad85a 5 #define ECHO_SERVER_PORT 7
fpucher 8:2c91833ef350 6 class Blinky {
fpucher 8:2c91833ef350 7 DigitalOut _myled;
fpucher 8:2c91833ef350 8 int zahl;
fpucher 8:2c91833ef350 9 public:
fpucher 8:2c91833ef350 10 Blinky(PinName ld) : _myled(ld), zahl(0) {}
fpucher 8:2c91833ef350 11 void LedOn() {
fpucher 8:2c91833ef350 12 _myled = 1;
fpucher 8:2c91833ef350 13 }
fpucher 8:2c91833ef350 14 void LedOff() {
fpucher 8:2c91833ef350 15 _myled = 0;
fpucher 8:2c91833ef350 16 }
fpucher 8:2c91833ef350 17 };
fpucher 8:2c91833ef350 18
fpucher 8:2c91833ef350 19 Blinky bl(LED1);
emilmont 3:36fd3cfad85a 20
emilmont 1:5cebe0e38cd2 21 int main (void) {
emilmont 1:5cebe0e38cd2 22 EthernetInterface eth;
emilmont 1:5cebe0e38cd2 23 eth.init(); //Use DHCP
emilmont 1:5cebe0e38cd2 24 eth.connect();
mbedAustin 7:a5ead1402704 25 printf("\nServer IP Address is %s\n", eth.getIPAddress());
emilmont 1:5cebe0e38cd2 26
emilmont 1:5cebe0e38cd2 27 TCPSocketServer server;
emilmont 3:36fd3cfad85a 28 server.bind(ECHO_SERVER_PORT);
emilmont 3:36fd3cfad85a 29 server.listen();
emilmont 1:5cebe0e38cd2 30
emilmont 1:5cebe0e38cd2 31 while (true) {
emilmont 1:5cebe0e38cd2 32 printf("\nWait for new connection...\n");
emilmont 1:5cebe0e38cd2 33 TCPSocketConnection client;
emilmont 1:5cebe0e38cd2 34 server.accept(client);
emilmont 3:36fd3cfad85a 35 client.set_blocking(false, 1500); // Timeout after (1.5)s
emilmont 1:5cebe0e38cd2 36
emilmont 1:5cebe0e38cd2 37 printf("Connection from: %s\n", client.get_address());
emilmont 1:5cebe0e38cd2 38 char buffer[256];
emilmont 1:5cebe0e38cd2 39 while (true) {
emilmont 3:36fd3cfad85a 40 int n = client.receive(buffer, sizeof(buffer));
emilmont 1:5cebe0e38cd2 41 if (n <= 0) break;
emilmont 1:5cebe0e38cd2 42
mbedAustin 7:a5ead1402704 43 // print received message to terminal
mbedAustin 7:a5ead1402704 44 buffer[n] = '\0';
mbedAustin 7:a5ead1402704 45 printf("Received message from Client :'%s'\n",buffer);
mbedAustin 7:a5ead1402704 46
mbedAustin 7:a5ead1402704 47 // reverse the message
mbedAustin 7:a5ead1402704 48 char temp;
mbedAustin 7:a5ead1402704 49 for(int f = 0, l = n-1; f<l; f++,l--){
mbedAustin 7:a5ead1402704 50 temp = buffer[f];
mbedAustin 7:a5ead1402704 51 buffer[f] = buffer[l];
mbedAustin 7:a5ead1402704 52 buffer[l] = temp;
mbedAustin 7:a5ead1402704 53 }
mbedAustin 7:a5ead1402704 54
mbedAustin 7:a5ead1402704 55 // print reversed message to terminal
mbedAustin 7:a5ead1402704 56 printf("Sending message to Client: '%s'\n",buffer);
fpucher 8:2c91833ef350 57 bl.LedOn();
fpucher 8:2c91833ef350 58 wait(0.5);
fpucher 8:2c91833ef350 59 bl.LedOff();
fpucher 8:2c91833ef350 60 wait(0.5);
fpucher 8:2c91833ef350 61
mbedAustin 7:a5ead1402704 62 // Echo received message back to client
emilmont 2:ec5ae99791da 63 client.send_all(buffer, n);
emilmont 1:5cebe0e38cd2 64 if (n <= 0) break;
emilmont 1:5cebe0e38cd2 65 }
emilmont 3:36fd3cfad85a 66
emilmont 1:5cebe0e38cd2 67 client.close();
emilmont 1:5cebe0e38cd2 68 }
emilmont 1:5cebe0e38cd2 69 }