TCP Server tests STM32F767

Committer:
Arkadi
Date:
Fri Mar 08 15:33:14 2019 +0000
Revision:
0:ba64cd345be8
TCP Server test wtih stm32f767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 0:ba64cd345be8 1 //#if !FEATURE_LWIP
Arkadi 0:ba64cd345be8 2 // #error [NOT_SUPPORTED] LWIP not supported for this target
Arkadi 0:ba64cd345be8 3 //#endif
Arkadi 0:ba64cd345be8 4
Arkadi 0:ba64cd345be8 5 // ref
Arkadi 0:ba64cd345be8 6 // https://os.mbed.com/questions/76794/How-to-set-Static-IP-address-with-Nucleo/
Arkadi 0:ba64cd345be8 7 // https://os.mbed.com/docs/mbed-os/v5.11/apis/ethernet.html
Arkadi 0:ba64cd345be8 8 #include "mbed.h"
Arkadi 0:ba64cd345be8 9 #include "EthernetInterface.h"
Arkadi 0:ba64cd345be8 10 #include "TCPServer.h"
Arkadi 0:ba64cd345be8 11 #include "TCPSocket.h"
Arkadi 0:ba64cd345be8 12
Arkadi 0:ba64cd345be8 13 #define HTTP_STATUS_LINE "HTTP/1.0 200 OK"
Arkadi 0:ba64cd345be8 14 #define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8"
Arkadi 0:ba64cd345be8 15 #define HTTP_MESSAGE_BODY "" \
Arkadi 0:ba64cd345be8 16 "<html>" "\r\n" \
Arkadi 0:ba64cd345be8 17 " <body style=\"display:flex;text-align:center\">" "\r\n" \
Arkadi 0:ba64cd345be8 18 " <div style=\"margin:auto\">" "\r\n" \
Arkadi 0:ba64cd345be8 19 " <h1>Hello World</h1>" "\r\n" \
Arkadi 0:ba64cd345be8 20 " <p>Finally It works !</p>" "\r\n" \
Arkadi 0:ba64cd345be8 21 " </div>" "\r\n" \
Arkadi 0:ba64cd345be8 22 " </body>" "\r\n" \
Arkadi 0:ba64cd345be8 23 "</html>"
Arkadi 0:ba64cd345be8 24
Arkadi 0:ba64cd345be8 25 #define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n" \
Arkadi 0:ba64cd345be8 26 HTTP_HEADER_FIELDS "\r\n" \
Arkadi 0:ba64cd345be8 27 "\r\n" \
Arkadi 0:ba64cd345be8 28 HTTP_MESSAGE_BODY "\r\n"
Arkadi 0:ba64cd345be8 29
Arkadi 0:ba64cd345be8 30
Arkadi 0:ba64cd345be8 31 Serial pc(SERIAL_TX, SERIAL_RX);
Arkadi 0:ba64cd345be8 32 int main()
Arkadi 0:ba64cd345be8 33 {
Arkadi 0:ba64cd345be8 34 pc.baud(57600);
Arkadi 0:ba64cd345be8 35
Arkadi 0:ba64cd345be8 36 pc.printf("Basic HTTP server example\r\n");
Arkadi 0:ba64cd345be8 37
Arkadi 0:ba64cd345be8 38 EthernetInterface eth;
Arkadi 0:ba64cd345be8 39 eth.set_network("192.168.1.11","255.255.252.0","192.168.1.10");
Arkadi 0:ba64cd345be8 40 //eth.set_network(IP_Adress,GATEWAY,MASK);
Arkadi 0:ba64cd345be8 41 eth.connect();
Arkadi 0:ba64cd345be8 42
Arkadi 0:ba64cd345be8 43 pc.printf("The target IP address is '%s'\r\n", eth.get_ip_address());
Arkadi 0:ba64cd345be8 44
Arkadi 0:ba64cd345be8 45 TCPServer srv;
Arkadi 0:ba64cd345be8 46 TCPSocket clt_sock;
Arkadi 0:ba64cd345be8 47 SocketAddress clt_addr;
Arkadi 0:ba64cd345be8 48
Arkadi 0:ba64cd345be8 49 /* Open the server on ethernet stack */
Arkadi 0:ba64cd345be8 50 srv.open(&eth);
Arkadi 0:ba64cd345be8 51
Arkadi 0:ba64cd345be8 52 /* Bind the HTTP port (TCP 22) to the server */
Arkadi 0:ba64cd345be8 53 srv.bind(eth.get_ip_address(), 80);
Arkadi 0:ba64cd345be8 54
Arkadi 0:ba64cd345be8 55 /* Can handle 5 simultaneous connections */
Arkadi 0:ba64cd345be8 56 srv.listen(5);
Arkadi 0:ba64cd345be8 57
Arkadi 0:ba64cd345be8 58 char buffer[300];
Arkadi 0:ba64cd345be8 59
Arkadi 0:ba64cd345be8 60 while (true) {
Arkadi 0:ba64cd345be8 61 srv.accept(&clt_sock, &clt_addr);
Arkadi 0:ba64cd345be8 62 pc.printf("accept %s:%d\r\n", clt_addr.get_ip_address(), clt_addr.get_port());
Arkadi 0:ba64cd345be8 63 clt_sock.send(HTTP_RESPONSE, strlen(HTTP_RESPONSE));
Arkadi 0:ba64cd345be8 64
Arkadi 0:ba64cd345be8 65 // example to move messages between uart and tcp / ip socket
Arkadi 0:ba64cd345be8 66 while (0) {
Arkadi 0:ba64cd345be8 67 if (1) {
Arkadi 0:ba64cd345be8 68 while (pc.readable()) {
Arkadi 0:ba64cd345be8 69 char c = pc.getc(); // Read hyperterminal
Arkadi 0:ba64cd345be8 70 buffer[0] = c;
Arkadi 0:ba64cd345be8 71 clt_sock.send(buffer, 1);
Arkadi 0:ba64cd345be8 72 //echo
Arkadi 0:ba64cd345be8 73 pc.printf("%c", c);
Arkadi 0:ba64cd345be8 74 }
Arkadi 0:ba64cd345be8 75 } else {
Arkadi 0:ba64cd345be8 76 // blocking mode
Arkadi 0:ba64cd345be8 77 int recdata = clt_sock.recv(buffer,300);
Arkadi 0:ba64cd345be8 78 if (recdata >0 ){
Arkadi 0:ba64cd345be8 79 buffer[recdata]=0;
Arkadi 0:ba64cd345be8 80 printf("%s %d\r\n", buffer, recdata);
Arkadi 0:ba64cd345be8 81 // echo
Arkadi 0:ba64cd345be8 82 buffer[recdata]=10;
Arkadi 0:ba64cd345be8 83 buffer[recdata+1]=13;
Arkadi 0:ba64cd345be8 84 clt_sock.send(buffer, recdata+2);
Arkadi 0:ba64cd345be8 85 }
Arkadi 0:ba64cd345be8 86 }
Arkadi 0:ba64cd345be8 87 }
Arkadi 0:ba64cd345be8 88
Arkadi 0:ba64cd345be8 89 }
Arkadi 0:ba64cd345be8 90 }