Http server witch sends HTML file to client

Dependencies:   EthernetInterface SDFileSystem mbed-rtos mbed

Fork of SKM_SERWER_WWW by Dawid Bartosiak

Committer:
filiops
Date:
Tue Dec 19 00:08:16 2017 +0000
Revision:
4:7a6ba70f58de
Parent:
3:c05bbec8d96b
HTTP server

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andcor02 0:f682dcf80f00 1 #include "mbed.h"
barti19941 2:8d5a84fcf90c 2 #include "EthernetInterface.h"
barti19941 2:8d5a84fcf90c 3 #include "SDFileSystem.h"
barti19941 2:8d5a84fcf90c 4 #include <string.h>
barti19941 2:8d5a84fcf90c 5 #include <stdio.h>
filiops 4:7a6ba70f58de 6 #include <iostream>
filiops 4:7a6ba70f58de 7
filiops 4:7a6ba70f58de 8 #define PORT 80
filiops 4:7a6ba70f58de 9
filiops 4:7a6ba70f58de 10
filiops 4:7a6ba70f58de 11 const char *ip = "192.168.100.1";
filiops 4:7a6ba70f58de 12 const char *mask = "255.255.255.0";
filiops 4:7a6ba70f58de 13 const char *gateway = "192.168.100.1";
filiops 4:7a6ba70f58de 14
filiops 4:7a6ba70f58de 15 Serial pc(USBTX, USBRX);
filiops 4:7a6ba70f58de 16 FILE *fp;
filiops 4:7a6ba70f58de 17 char buffer[1024];
filiops 4:7a6ba70f58de 18
filiops 4:7a6ba70f58de 19 EthernetInterface eth; //Tworzenie obiektu Ethernet
filiops 4:7a6ba70f58de 20 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); //inicjalizacja czytnika karty SD (MOSI,MISO,SCK,CS)
filiops 4:7a6ba70f58de 21 TCPSocketConnection client; //Tworzenie socketu TCP dla 2 stron (client, server)
filiops 4:7a6ba70f58de 22 TCPSocketServer svr;
filiops 4:7a6ba70f58de 23
filiops 4:7a6ba70f58de 24 bool server_is_listened = false; // Ustawienie defaultowych wartosci flag
filiops 4:7a6ba70f58de 25 bool client_is_connected = false;
filiops 4:7a6ba70f58de 26
filiops 4:7a6ba70f58de 27 void Send_Data_From_SD()
filiops 4:7a6ba70f58de 28 {
filiops 4:7a6ba70f58de 29 pc.printf("Inicjalizacja... \r\n");
filiops 4:7a6ba70f58de 30 wait(2);
filiops 4:7a6ba70f58de 31
filiops 4:7a6ba70f58de 32 fp = fopen("/sd/hello.htm", "r");
filiops 4:7a6ba70f58de 33 if (fp == NULL) {
filiops 4:7a6ba70f58de 34 pc.printf("\r\nNie udalo sie odczytac pliku hello.htm.\r\n");
filiops 4:7a6ba70f58de 35 } else {
filiops 4:7a6ba70f58de 36 printf("\nOdczytano plik hello.htm z karty SD.\r\n");
filiops 4:7a6ba70f58de 37 int size = fread(buffer, sizeof(char), 1024, fp);
filiops 4:7a6ba70f58de 38 printf("Liczba znakow: %d, tekst z pliku hello.htm:\r\n %s \r\n", size, buffer);
filiops 4:7a6ba70f58de 39 client.send(buffer, 1024); // Wysyłanie danych z odczytanego pliku do clienta TCP co powoduje odpowiednie akcje w przegladarce
filiops 4:7a6ba70f58de 40 fclose(fp);
filiops 4:7a6ba70f58de 41 }
filiops 4:7a6ba70f58de 42
filiops 4:7a6ba70f58de 43 client_is_connected = false;
filiops 4:7a6ba70f58de 44 }
filiops 4:7a6ba70f58de 45 void Initialize_Server(void)
filiops 4:7a6ba70f58de 46 {
filiops 4:7a6ba70f58de 47 eth.init(ip,mask,gateway); //Inicjalizacja polaczenia Ethernet, ustawienie statycznego adresu IP
filiops 4:7a6ba70f58de 48 eth.connect(); //Aktywowanie interfejsu
filiops 4:7a6ba70f58de 49 printf("Zainicjowano Ethernet! \r\n");
filiops 4:7a6ba70f58de 50 printf("Adres IP: %s\r\n",eth.getIPAddress());
filiops 4:7a6ba70f58de 51 printf("Maska: %s\r\n",eth.getNetworkMask());
filiops 4:7a6ba70f58de 52 printf("Brama: %s\r\n",eth.getGateway());
filiops 4:7a6ba70f58de 53 printf("Adres MAC urzadzenia: %s\r\n",eth.getMACAddress());
filiops 4:7a6ba70f58de 54 if (svr.bind(PORT) < 0)
filiops 4:7a6ba70f58de 55 {
filiops 4:7a6ba70f58de 56 printf("Nie udalo sie powiazac serwera TCP z portem 80 (HTTP)! \r\n");
filiops 4:7a6ba70f58de 57 return;
filiops 4:7a6ba70f58de 58 }
filiops 4:7a6ba70f58de 59 else
filiops 4:7a6ba70f58de 60 {
filiops 4:7a6ba70f58de 61 printf("Powiazano serwer TCP z portem 80 (HTTP). \r\n");
filiops 4:7a6ba70f58de 62 server_is_listened = true;
filiops 4:7a6ba70f58de 63 }
filiops 4:7a6ba70f58de 64
filiops 4:7a6ba70f58de 65 if (svr.listen(1) < 0)
filiops 4:7a6ba70f58de 66 {
filiops 4:7a6ba70f58de 67 printf("Nie udalo sie rozpoczac nasluchiwania polaczen przychodzacych serwera TCP! \r\n");
filiops 4:7a6ba70f58de 68 return;
filiops 4:7a6ba70f58de 69 }
filiops 4:7a6ba70f58de 70 else
filiops 4:7a6ba70f58de 71 {
filiops 4:7a6ba70f58de 72 printf("Serwer TCP rozpoczal nasluchiwanie polaczen przychodzacych. \r\n");
filiops 4:7a6ba70f58de 73 }
filiops 4:7a6ba70f58de 74 }
erigow01 1:623f51ea713b 75
barti19941 2:8d5a84fcf90c 76 int main()
barti19941 2:8d5a84fcf90c 77 {
filiops 4:7a6ba70f58de 78 pc.baud(9600);
filiops 4:7a6ba70f58de 79 printf("Zainicjowano UART! \r\n");
filiops 4:7a6ba70f58de 80 printf("Predkosc bitowa transmisji - 9600b/s.\r\n");
filiops 4:7a6ba70f58de 81 Initialize_Server();
filiops 4:7a6ba70f58de 82 while (server_is_listened) {
filiops 4:7a6ba70f58de 83 if (svr.accept(client))
filiops 4:7a6ba70f58de 84 {
filiops 4:7a6ba70f58de 85 printf("Nie udalo sie zaakceptowac polaczenia z klientem! \r\n");
filiops 4:7a6ba70f58de 86 }
filiops 4:7a6ba70f58de 87 else
filiops 4:7a6ba70f58de 88 {
filiops 4:7a6ba70f58de 89 printf("Polaczono z klientem. IP klienta: %s\r\n", client.get_address());
filiops 4:7a6ba70f58de 90 client_is_connected = true;
filiops 4:7a6ba70f58de 91 while (client_is_connected)
filiops 4:7a6ba70f58de 92 {
filiops 4:7a6ba70f58de 93 Send_Data_From_SD();
filiops 4:7a6ba70f58de 94 }
filiops 4:7a6ba70f58de 95 client.close();
filiops 4:7a6ba70f58de 96 printf("Wyslano dane do klienta i rozlaczono sesje. \r\n");
filiops 4:7a6ba70f58de 97 }
filiops 4:7a6ba70f58de 98 }
andcor02 0:f682dcf80f00 99 }