Simple UDP Server using the UIPEthernet library for ENC28J60 Ethernet boards.

Dependencies:   UIPEthernet

Committer:
hudakz
Date:
Tue Sep 03 11:19:37 2019 +0000
Revision:
3:e2462f078d64
Parent:
2:6bbdab30a1c1
Child:
4:b330511e8d56
Mbed OS 5 enabled.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 1:29bb0a32f61d 1 /*
hudakz 1:29bb0a32f61d 2 * UIPEthernet UdpServer example.
hudakz 1:29bb0a32f61d 3 *
hudakz 1:29bb0a32f61d 4 * UIPEthernet is a TCP/IP stack that can be used with an enc28j60 based
hudakz 1:29bb0a32f61d 5 * Ethernet-shield.
hudakz 1:29bb0a32f61d 6 *
hudakz 1:29bb0a32f61d 7 * UIPEthernet uses the fine uIP stack by Adam Dunkels <adam@sics.se>
hudakz 1:29bb0a32f61d 8 *
hudakz 1:29bb0a32f61d 9 * -----------------
hudakz 1:29bb0a32f61d 10 *
hudakz 1:29bb0a32f61d 11 * This UdpServer example sets up a udp-server at 192.168.1.181 on port 7 to
hudakz 1:29bb0a32f61d 12 * send packet via upd to test
hudakz 1:29bb0a32f61d 13 *
hudakz 1:29bb0a32f61d 14 * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de)
hudakz 1:29bb0a32f61d 15 *
hudakz 1:29bb0a32f61d 16 * Modified (ported to mbed) by Zoltan Hudak
hudakz 1:29bb0a32f61d 17 *
hudakz 1:29bb0a32f61d 18 */
hudakz 0:8823772081cb 19 #include "mbed.h"
hudakz 2:6bbdab30a1c1 20 #include "UipEthernet.h"
hudakz 2:6bbdab30a1c1 21
hudakz 2:6bbdab30a1c1 22 #define IP "192.168.1.35"
hudakz 2:6bbdab30a1c1 23 #define GATEWAY "192.168.1.1"
hudakz 2:6bbdab30a1c1 24 #define NETMASK "255.255.255.0"
hudakz 2:6bbdab30a1c1 25 #define PORT 80
hudakz 0:8823772081cb 26
hudakz 0:8823772081cb 27 // MAC address must be unique within the connected network. Modify as appropriate.
hudakz 2:6bbdab30a1c1 28 const uint8_t MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
hudakz 2:6bbdab30a1c1 29 UipEthernet net(MAC, D11, D12, D13, D10); // mac, mosi, miso, sck, cs
hudakz 0:8823772081cb 30
hudakz 2:6bbdab30a1c1 31 const char message[] = "Hello World from mbed!";
hudakz 2:6bbdab30a1c1 32
hudakz 0:8823772081cb 33
hudakz 0:8823772081cb 34 /**
hudakz 0:8823772081cb 35 * @brief
hudakz 0:8823772081cb 36 * @note
hudakz 0:8823772081cb 37 * @param
hudakz 0:8823772081cb 38 * @retval
hudakz 0:8823772081cb 39 */
hudakz 0:8823772081cb 40 int main(void) {
hudakz 2:6bbdab30a1c1 41 // Bring up the ethernet interface
hudakz 2:6bbdab30a1c1 42 //net.set_network(IP, NETMASK, GATEWAY); // include this for using static IP address
hudakz 2:6bbdab30a1c1 43 printf("UDP Server example\n");
hudakz 2:6bbdab30a1c1 44 if(net.connect() != 0) {
hudakz 2:6bbdab30a1c1 45 printf("Error connecting\n");
hudakz 2:6bbdab30a1c1 46 return -1;
hudakz 2:6bbdab30a1c1 47 }
hudakz 1:29bb0a32f61d 48
hudakz 2:6bbdab30a1c1 49 // Show the network address
hudakz 2:6bbdab30a1c1 50 const char* ip = net.get_ip_address();
hudakz 2:6bbdab30a1c1 51 const char* netmask = net.get_netmask();
hudakz 2:6bbdab30a1c1 52 const char* gateway = net.get_gateway();
hudakz 2:6bbdab30a1c1 53
hudakz 2:6bbdab30a1c1 54 printf("IP address: %s\r\n", ip ? ip : "None");
hudakz 2:6bbdab30a1c1 55 printf("Netmask: %s\r\n", netmask ? netmask : "None");
hudakz 2:6bbdab30a1c1 56 printf("Gateway: %s\r\n\r\n", gateway ? gateway : "None");
hudakz 2:6bbdab30a1c1 57
hudakz 2:6bbdab30a1c1 58 UdpSocket socket(&net);
hudakz 2:6bbdab30a1c1 59
hudakz 2:6bbdab30a1c1 60 socket.begin(PORT); // listen at port PORT for user datagrams
hudakz 2:6bbdab30a1c1 61
hudakz 3:e2462f078d64 62 printf("Waiting for datagrams from UDP clients ...\r\n\r\n");
hudakz 0:8823772081cb 63
hudakz 1:29bb0a32f61d 64 while (1) {
hudakz 1:29bb0a32f61d 65 int success;
hudakz 2:6bbdab30a1c1 66 int size = socket.parsePacket();
hudakz 1:29bb0a32f61d 67
hudakz 1:29bb0a32f61d 68 if (size > 0) {
hudakz 3:e2462f078d64 69 IpAddress remoteIp = socket.remoteIP();
hudakz 3:e2462f078d64 70 char remoteAddr[16];
hudakz 0:8823772081cb 71 do {
hudakz 2:6bbdab30a1c1 72 char* data = (char*)malloc(size + 1);
hudakz 2:6bbdab30a1c1 73 int len = socket.read(data, size + 1);
hudakz 2:6bbdab30a1c1 74 data[len] = 0;
hudakz 3:e2462f078d64 75 printf("data received from %s: \r\n%s", remoteIp.toString(remoteAddr), data);
hudakz 2:6bbdab30a1c1 76 free(data);
hudakz 2:6bbdab30a1c1 77 } while ((size = socket.available()) > 0);
hudakz 0:8823772081cb 78
hudakz 0:8823772081cb 79 //finish reading this packet:
hudakz 2:6bbdab30a1c1 80 socket.flush();
hudakz 3:e2462f078d64 81 printf("\r\n");
hudakz 0:8823772081cb 82
hudakz 0:8823772081cb 83 do {
hudakz 0:8823772081cb 84 //send new packet back to ip/port of client. This also
hudakz 0:8823772081cb 85 //configures the current connection to ignore packets from
hudakz 0:8823772081cb 86 //other clients!
hudakz 2:6bbdab30a1c1 87 success = socket.beginPacket(socket.remoteIP(), socket.remotePort());
hudakz 1:29bb0a32f61d 88 if (success)
hudakz 3:e2462f078d64 89 printf("beginPacket: succeeded\r\n");
hudakz 0:8823772081cb 90 else
hudakz 3:e2462f078d64 91 printf("beginPacket: failed\r\n");
hudakz 0:8823772081cb 92
hudakz 0:8823772081cb 93 //beginPacket fails if remote ethaddr is unknown. In this case an
hudakz 0:8823772081cb 94 //arp-request is send out first and beginPacket succeeds as soon
hudakz 0:8823772081cb 95 //the arp-response is received.
hudakz 1:29bb0a32f61d 96 } while (!success);
hudakz 0:8823772081cb 97
hudakz 2:6bbdab30a1c1 98 success = socket.write((uint8_t*)message, strlen(message));
hudakz 0:8823772081cb 99
hudakz 1:29bb0a32f61d 100 if (success)
hudakz 2:6bbdab30a1c1 101 printf("bytes written: %d\r\n", success);
hudakz 0:8823772081cb 102
hudakz 2:6bbdab30a1c1 103 success = socket.endPacket();
hudakz 0:8823772081cb 104
hudakz 1:29bb0a32f61d 105 if (success)
hudakz 3:e2462f078d64 106 printf("endPacket: succeeded\r\n");
hudakz 0:8823772081cb 107 else
hudakz 3:e2462f078d64 108 printf("endPacket: failed\r\n");
hudakz 0:8823772081cb 109
hudakz 2:6bbdab30a1c1 110 socket.close();
hudakz 0:8823772081cb 111
hudakz 0:8823772081cb 112 //restart with new connection to receive packets from other clients
hudakz 2:6bbdab30a1c1 113 if (socket.begin(PORT))
hudakz 3:e2462f078d64 114 printf("restart connection: succeeded\r\n");
hudakz 0:8823772081cb 115 else
hudakz 3:e2462f078d64 116 printf("restart connection: failed\r\n");
hudakz 0:8823772081cb 117 }
hudakz 0:8823772081cb 118 }
hudakz 0:8823772081cb 119 }