레이블이 TCP Server인 게시물을 표시합니다. 모든 게시물 표시
레이블이 TCP Server인 게시물을 표시합니다. 모든 게시물 표시

2015년 7월 5일 일요일

DHCPChatServer

DHCP Chat Server

TCP

TCP의 자세한 내용은 아래의 링크와 플로우챠트를 참조한다.

TCP

Do DhcpChatServer

  1. Create New Program as DHCP Chat Server
    2015-07-03_11-25-08
  2. Import WIZnetInterface by using Import Wizard:”https://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/"(1)
    2015-07-03_11-28-12
  3. Confirm the created program (mbed: mbed.lib, main.c:blinky_led, WIZnetInterface: ethernet interface)
    2015-07-03_12-47-27
  4. Make codes

    • DHCPClient Setting, Define Source port
      2015-07-06_13-40-20
    • TCP server codes
      2015-07-06_13-35-41
  5. Set serial teminal for teraterm
    2015-07-03_13-07-00

  6. Set TCP client by using hercules
    2015-07-03_13-07-25

  1. Display

    • Step1: success DHCP client and wait tcp client.
      2015-07-03_12-59-44

    • Step2: Complete TCP-connection from hecules(TCP client)
      2015-07-03_13-17-34

  1. Confirm sent data and received data
    • on hecules
      2015-07-03_13-19-39
    • on teraterm
      2015-07-03_13-19-43
    • on Wireshark (Packet Capture)
      2015-07-03_13-25-55

Code Repositroy

http://developer.mbed.org/users/embeddist/code/DHCPChatServe

Rer. 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);
    }
}