SimpleSocket 1.0 examples

Dependencies:   EthernetNetIf SimpleSocket 1.0 mbed

Committer:
yamaguch
Date:
Tue Aug 16 02:50:52 2011 +0000
Revision:
1:7350a2598a80
Parent:
0:c41b68a4a296
Child:
2:304672a01127
rewrite 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 1:7350a2598a80 1 #include "mbed.h"
yamaguch 1:7350a2598a80 2 #include "EthernetNetIf.h"
yamaguch 1:7350a2598a80 3 #include "TCPSocket.h"
yamaguch 1:7350a2598a80 4 #include "SocketUtil.h"
yamaguch 1:7350a2598a80 5
yamaguch 1:7350a2598a80 6 EthernetNetIf eth;
yamaguch 1:7350a2598a80 7 DigitalOut led1(LED1);
yamaguch 1:7350a2598a80 8
yamaguch 1:7350a2598a80 9 TCPSocket tcp; //The listening port where requests are queued
yamaguch 1:7350a2598a80 10 TCPSocket* link; //The port where accepted requests can communicate
yamaguch 1:7350a2598a80 11 Host local(IpAddr(), 1234); // mbed
yamaguch 1:7350a2598a80 12 Host client;
yamaguch 1:7350a2598a80 13
yamaguch 1:7350a2598a80 14 void onLinkSocketEvent(TCPSocketEvent e) {
yamaguch 1:7350a2598a80 15 SocketEvent event = e;
yamaguch 1:7350a2598a80 16 printf(event);
yamaguch 1:7350a2598a80 17
yamaguch 1:7350a2598a80 18 switch (event) {
yamaguch 1:7350a2598a80 19 case TCPSOCKET_READABLE:
yamaguch 1:7350a2598a80 20 char buf[128];
yamaguch 1:7350a2598a80 21 while (int len = link->recv(buf, 128)) {
yamaguch 1:7350a2598a80 22 // And send straight back out again
yamaguch 1:7350a2598a80 23 link->send(buf, len);
yamaguch 1:7350a2598a80 24 buf[len] = 0; // make terminater
yamaguch 1:7350a2598a80 25 printf("Received & Wrote: %s\n",buf);
yamaguch 1:7350a2598a80 26 }
yamaguch 1:7350a2598a80 27 break;
yamaguch 1:7350a2598a80 28 case TCPSOCKET_DISCONNECTED:
yamaguch 1:7350a2598a80 29 link->close();
yamaguch 1:7350a2598a80 30 break;
yamaguch 1:7350a2598a80 31 }
yamaguch 1:7350a2598a80 32 }
yamaguch 1:7350a2598a80 33
yamaguch 1:7350a2598a80 34 void onTCPSocketEvent(TCPSocketEvent e) {
yamaguch 1:7350a2598a80 35 SocketEvent event = e;
yamaguch 1:7350a2598a80 36 printf(event);
yamaguch 1:7350a2598a80 37
yamaguch 1:7350a2598a80 38 switch (event) {
yamaguch 1:7350a2598a80 39 case TCPSOCKET_ACCEPT:
yamaguch 1:7350a2598a80 40 if (SocketError err = tcp.accept(&client, &link)) {
yamaguch 1:7350a2598a80 41 printf(err);
yamaguch 1:7350a2598a80 42 } else {
yamaguch 1:7350a2598a80 43 link->setOnEvent(&onLinkSocketEvent);
yamaguch 1:7350a2598a80 44 IpAddr ip = client.getIp();
yamaguch 1:7350a2598a80 45 printf("Incoming TCP connection from %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
yamaguch 1:7350a2598a80 46 }
yamaguch 1:7350a2598a80 47 break;
yamaguch 1:7350a2598a80 48
yamaguch 1:7350a2598a80 49 case TCPSOCKET_DISCONNECTED:
yamaguch 1:7350a2598a80 50 tcp.close();
yamaguch 1:7350a2598a80 51 break;
yamaguch 1:7350a2598a80 52 }
yamaguch 1:7350a2598a80 53 }
yamaguch 1:7350a2598a80 54
yamaguch 1:7350a2598a80 55 int main() {
yamaguch 1:7350a2598a80 56 //Basic setup
yamaguch 1:7350a2598a80 57 printf("Welcome to wireFUSE\n");
yamaguch 1:7350a2598a80 58 printf("Setting up...\n");
yamaguch 1:7350a2598a80 59 EthernetErr ethErr = eth.setup();
yamaguch 1:7350a2598a80 60 if (ethErr)
yamaguch 1:7350a2598a80 61 error("Error %d in setup.\n", ethErr);
yamaguch 1:7350a2598a80 62 printf("Setup OK\n");
yamaguch 1:7350a2598a80 63
yamaguch 1:7350a2598a80 64 tcp.setOnEvent(&onTCPSocketEvent);
yamaguch 1:7350a2598a80 65
yamaguch 1:7350a2598a80 66 //Bind to local port
yamaguch 1:7350a2598a80 67 SocketError bindErr = tcp.bind(local);
yamaguch 1:7350a2598a80 68 printf("Init bind... %s", (char *) bindErr);
yamaguch 1:7350a2598a80 69
yamaguch 1:7350a2598a80 70 //Listen to local port
yamaguch 1:7350a2598a80 71 TCPSocketErr listenErr = tcp.listen();
yamaguch 1:7350a2598a80 72 printf("Init listen... %s", (char *)listenErr);
yamaguch 1:7350a2598a80 73
yamaguch 1:7350a2598a80 74 Timer timer;
yamaguch 1:7350a2598a80 75 timer.start();
yamaguch 1:7350a2598a80 76 while (true) {
yamaguch 1:7350a2598a80 77 Net::poll();
yamaguch 1:7350a2598a80 78 if (timer.read() > 10) {
yamaguch 1:7350a2598a80 79 timer.reset();
yamaguch 1:7350a2598a80 80 led1 = !led1; //Show that we are alive
yamaguch 1:7350a2598a80 81 printf("waiting for client on port 1234\n");
yamaguch 1:7350a2598a80 82 }
yamaguch 1:7350a2598a80 83 }
yamaguch 0:c41b68a4a296 84 }