2015년 7월 5일 일요일

DNSWebClient

DNS Web Client

자세한 사항은 아래의 링크와 그림을 참고 한다.

DNS

  • DNS-wikipedia
    DNS
    *참고:http://www.routercheck.com/wp-content/uploads/2014/03/dns-and-ipv6-470x282.jpg

    HTTP

  • HTTP-wikipedia
    HTTP
    *참고:http://codegangsta.gitbooks.io/building-web-apps-with-go/content/http_basics/http_diagram.png

Do DnsWebClient

  1. Create New Program as DNS Web Client
    2015-07-03_14-49-16
  2. Confirm the created program
    2015-07-03_14-49-44
  3. Import WIZnetInterface by using Import Wizard:”https://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/"(1)
    2015-07-03_14-52-50
  4. Make Codes

    • Set DHCPclient, Sourtce port and Domain name server
      2015-07-06_13-08-46
    • TCP-connection, TCP-recv and Display received data
      2015-07-06_13-09-22
  5. Confirm packets bye WireShark
    5.1 DHCP complite
    5.2 DNS handshake between Clinet and DNS server
    5.3 TCP-Connection between Clinet and HTTP server
    5.4 Request HTTP GET
    5.5 RECV TCP DATA: HTTP page
    2015-07-06_11-26-47

  6. DNS packet

    • 5.1 DNS Request
      2015-07-06_12-55-45
    • 5.2 DNS Reponse
      2015-07-06_12-56-51
  7. Confirm Serial Teminal

    • Set Serial teminal
      2015-07-03_13-07-00
    • Display
      2015-07-03_17-40-38

Code Repository

https://developer.mbed.org/users/embeddist/code/DNSWebClient/

Ref. Code

#include "mbed.h"
#include "EthernetInterface.h"

#define ECHO_SERVER_PORT   23 // telnet defaults to port 23

DigitalOut myled(LED1);

// Initialize the Ethernet client library
EthernetInterface eth;

int main() {
    // Enter a MAC address for your controller below.
    uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02}; 

    // initializing MAC address
    eth.init(mac_addr);

    // Check Ethenret Link
    if(eth.link() == true)
        printf("- Ethernet PHY Link-Done \r\n");
    else
        printf("- Ethernet PHY Link- Fail\r\n");

    // Start Ethernet connecting: Trying to get an IP address using DHCP
    if ( eth.connect() < 0 )
        printf("Fail - Ethernet Connecing");
    else
    {
        // Print your local IP address:
        printf("IP=%s\n\r",eth.getIPAddress());
        printf("MASK=%s\n\r",eth.getNetworkMask());
        printf("GW=%s\n\r",eth.getGateway());
    }        

    TCPSocketServer server;
    server.bind(ECHO_SERVER_PORT);
    server.listen();

    while (true) {
        printf("\nWait for new connection...\n\r");
        TCPSocketConnection client;
        server.accept(client);
        //client.set_blocking(false, 1500); // Timeout after (1.5)s

        printf("Connection from: %s\n\r", client.get_address());
        char buffer[256];
        while (true) {
            int n = client.receive(buffer, sizeof(buffer));
            if (n <= 0) break;

            // print received message to terminal
            buffer[n] = '\0';
            printf("Received message from Client :'%s'\n\r",buffer);

            // reverse the message
            char temp;
            for(int f = 0, l = n-1; f<l; f++,l--){
                temp = buffer[f];
                buffer[f] = buffer[l];
                buffer[l] = temp;
                }

            // print reversed message to terminal
            printf("Sending message to Client: '%s'\n\r",buffer);

            // Echo received message back to client
            client.send_all(buffer, n);
            if (n <= 0) break;
        }

        client.close();

        //led blinky
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}