Simple TCP/IP Client using the UIPEthernet library for ENC28J60 Ethernet boards.

Dependencies:   UIPEthernet

Committer:
hudakz
Date:
Sat Aug 31 20:48:02 2019 +0000
Revision:
3:9c32e3375fc5
Parent:
2:5656f7efd7c7
Child:
4:9f42e50733be
Mbed OS 5 enabled.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:5e91bb901022 1 /*
hudakz 3:9c32e3375fc5 2 * TcpClient example using the UIPEthernet library for ENC28J60 Ethernet boards.
hudakz 0:5e91bb901022 3 *
hudakz 0:5e91bb901022 4 */
hudakz 3:9c32e3375fc5 5 #include "mbed.h"
hudakz 3:9c32e3375fc5 6 #include "UipEthernet.h"
hudakz 3:9c32e3375fc5 7 #include "TcpClient.h"
hudakz 0:5e91bb901022 8
hudakz 3:9c32e3375fc5 9 const uint8_t MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
hudakz 3:9c32e3375fc5 10 UipEthernet net(MAC, D11, D12, D13, D10); // mac, mosi, miso, sck, cs
hudakz 0:5e91bb901022 11
hudakz 3:9c32e3375fc5 12 /**
hudakz 3:9c32e3375fc5 13 * @brief
hudakz 3:9c32e3375fc5 14 * @note
hudakz 3:9c32e3375fc5 15 * @param
hudakz 3:9c32e3375fc5 16 * @retval
hudakz 3:9c32e3375fc5 17 */
hudakz 0:5e91bb901022 18 int main()
hudakz 0:5e91bb901022 19 {
hudakz 3:9c32e3375fc5 20 const time_t TIMEOUT = 5; // Connection timeout time
hudakz 3:9c32e3375fc5 21 time_t timeOut;
hudakz 3:9c32e3375fc5 22 char data[] = "GET / HTTP/1.1\r\nHost: ifconfig.io\r\nConnection: close\r\n\r\n";
hudakz 3:9c32e3375fc5 23 char* remaining;
hudakz 3:9c32e3375fc5 24 uint8_t* recvBuf;
hudakz 3:9c32e3375fc5 25 int result;
hudakz 3:9c32e3375fc5 26
hudakz 3:9c32e3375fc5 27 printf("Starting ...\r\n");
hudakz 3:9c32e3375fc5 28
hudakz 3:9c32e3375fc5 29 net.connect();
hudakz 0:5e91bb901022 30
hudakz 3:9c32e3375fc5 31 // Show the network address
hudakz 3:9c32e3375fc5 32 const char* ip = net.get_ip_address();
hudakz 3:9c32e3375fc5 33 const char* netmask = net.get_netmask();
hudakz 3:9c32e3375fc5 34 const char* gateway = net.get_gateway();
hudakz 3:9c32e3375fc5 35 printf("IP address: %s\n", ip ? ip : "None");
hudakz 3:9c32e3375fc5 36 printf("Netmask: %s\n", netmask ? netmask : "None");
hudakz 3:9c32e3375fc5 37 printf("Gateway: %s\n", gateway ? gateway : "None");
hudakz 3:9c32e3375fc5 38
hudakz 3:9c32e3375fc5 39 // Open a socket on the network interface, and create a TCP connection to ifconfig.io
hudakz 3:9c32e3375fc5 40 TcpClient socket;
hudakz 3:9c32e3375fc5 41
hudakz 3:9c32e3375fc5 42 result = socket.open(&net);
hudakz 3:9c32e3375fc5 43 if (result != 0) {
hudakz 3:9c32e3375fc5 44 printf("Error! socket.open() returned: %d\n", result);
hudakz 0:5e91bb901022 45 }
hudakz 0:5e91bb901022 46
hudakz 3:9c32e3375fc5 47 timeOut = time(NULL) + TIMEOUT;
hudakz 3:9c32e3375fc5 48 printf("Connecting to the 'ifconfig.io' server ...\r\n");
hudakz 3:9c32e3375fc5 49
hudakz 3:9c32e3375fc5 50 result = socket.connect("ifconfig.io", 80);
hudakz 3:9c32e3375fc5 51 if (result != 0) {
hudakz 3:9c32e3375fc5 52 printf("Error! socket.connect() returned: %d\n", result);
hudakz 3:9c32e3375fc5 53 goto DISCONNECT;
hudakz 3:9c32e3375fc5 54 }
hudakz 3:9c32e3375fc5 55
hudakz 3:9c32e3375fc5 56 printf("Server connected.\r\n");
hudakz 3:9c32e3375fc5 57 printf("Sending data to server:\r\n");
hudakz 3:9c32e3375fc5 58 remaining = data;
hudakz 3:9c32e3375fc5 59 result = strlen(remaining);
hudakz 3:9c32e3375fc5 60 while (result) {
hudakz 3:9c32e3375fc5 61 result = socket.send((uint8_t*)remaining, strlen(remaining));
hudakz 3:9c32e3375fc5 62 if (result < 0) {
hudakz 3:9c32e3375fc5 63 printf("Error! socket.send() returned: %d\n", result);
hudakz 3:9c32e3375fc5 64 goto DISCONNECT;
hudakz 3:9c32e3375fc5 65 }
hudakz 3:9c32e3375fc5 66 printf("%.*s", result, remaining);
hudakz 3:9c32e3375fc5 67 remaining += result;
hudakz 3:9c32e3375fc5 68 }
hudakz 3:9c32e3375fc5 69
hudakz 3:9c32e3375fc5 70 printf("Waiting for data from server:\r\n");
hudakz 3:9c32e3375fc5 71 while (socket.available() == 0) {
hudakz 3:9c32e3375fc5 72 if (time(NULL) > timeOut) {
hudakz 3:9c32e3375fc5 73 printf("Connection time out.\r\n");
hudakz 3:9c32e3375fc5 74 goto DISCONNECT;
hudakz 0:5e91bb901022 75 }
hudakz 0:5e91bb901022 76 }
hudakz 3:9c32e3375fc5 77
hudakz 3:9c32e3375fc5 78 printf("Data received:\r\n");
hudakz 3:9c32e3375fc5 79 while ((result = socket.available()) > 0) {
hudakz 3:9c32e3375fc5 80 recvBuf = (uint8_t*)malloc(result);
hudakz 3:9c32e3375fc5 81 result = socket.recv(recvBuf, result);
hudakz 3:9c32e3375fc5 82 if (result < 0) {
hudakz 3:9c32e3375fc5 83 printf("Error! socket.recv() returned: %d\n", result);
hudakz 3:9c32e3375fc5 84 goto DISCONNECT;
hudakz 3:9c32e3375fc5 85 }
hudakz 3:9c32e3375fc5 86 printf("%.*s\r\n", result, recvBuf);
hudakz 3:9c32e3375fc5 87 free(recvBuf);
hudakz 3:9c32e3375fc5 88 }
hudakz 3:9c32e3375fc5 89
hudakz 3:9c32e3375fc5 90 printf("\r\n");
hudakz 3:9c32e3375fc5 91
hudakz 3:9c32e3375fc5 92 DISCONNECT:
hudakz 3:9c32e3375fc5 93 // Close the socket to return its memory and bring down the network interface
hudakz 3:9c32e3375fc5 94 socket.close();
hudakz 3:9c32e3375fc5 95
hudakz 3:9c32e3375fc5 96 // Bring down the ethernet interface
hudakz 3:9c32e3375fc5 97 net.disconnect();
hudakz 3:9c32e3375fc5 98 printf("Done\n");
hudakz 0:5e91bb901022 99 }