Http server witch sends HTML file to client
Dependencies: EthernetInterface SDFileSystem mbed-rtos mbed
Fork of SKM_SERWER_WWW by
main.cpp@4:7a6ba70f58de, 2017-12-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |