SimpleSocket 1.0 examples
Dependencies: EthernetNetIf SimpleSocket 1.0 mbed
Diff: main.cpp
- Revision:
- 1:7350a2598a80
- Parent:
- 0:c41b68a4a296
- Child:
- 2:304672a01127
diff -r c41b68a4a296 -r 7350a2598a80 main.cpp --- a/main.cpp Tue Aug 16 02:02:54 2011 +0000 +++ b/main.cpp Tue Aug 16 02:50:52 2011 +0000 @@ -1,215 +1,84 @@ -#include "mbed.h" -#include "EthernetNetIf.h" -#include "TCPSocket.h" - -EthernetNetIf eth; -DigitalOut led1(LED1); - - -TCPSocket tcp; //The listening port where requests are queued -TCPSocket* link; //The port where accepted requests can communicate -Host local(IpAddr(), 1234); // mbed -Host client; - -TCPSocketErr accErr; - -void onLinkSocketEvent(TCPSocketEvent e) { - switch (e) { - case TCPSOCKET_CONNECTED: - printf("TCP Socket Connected\r\n"); - break; - case TCPSOCKET_WRITEABLE: - //Can now write some data... - printf("TCP Socket Writable\r\n"); - break; - case TCPSOCKET_READABLE: - //Can now read dome data... - printf("TCP Socket Readable\r\n"); - // Read in any available data into the buffer - char buff[128]; - while (int len = link->recv(buff, 128)) { - // And send straight back out again - link->send(buff, len); - buff[len]=0; // make terminater - printf("Received&Wrote:%s\r\n",buff); - } - break; - case TCPSOCKET_CONTIMEOUT: - printf("TCP Socket Timeout\r\n"); - break; - case TCPSOCKET_CONRST: - printf("TCP Socket CONRST\r\n"); - break; - case TCPSOCKET_CONABRT: - printf("TCP Socket CONABRT\r\n"); - break; - case TCPSOCKET_ERROR: - printf("TCP Socket Error\r\n"); - break; - case TCPSOCKET_DISCONNECTED: - //Close socket... - printf("TCP Socket Disconnected\r\n"); - link->close(); - break; - default: - printf("DEFAULT\r\n"); - } -} - -void onTCPSocketEvent(TCPSocketEvent e) { - IpAddr clientIp; - - switch (e) { - case TCPSOCKET_CONNECTED: - printf("Connected\n"); - break; - - case TCPSOCKET_ACCEPT: - accErr = tcp.accept(&client,&link); - switch (accErr) { - case TCPSOCKET_SETUP: - printf("Err:Setup\n"); - break; //TCPSocket not properly configured. - case TCPSOCKET_TIMEOUT: - printf("Err:Timeout\n"); - break; //Connection timed out. - case TCPSOCKET_IF: - printf("Err:Interface\n"); - break; //Interface has problems, does not exist or is not initialized. - case TCPSOCKET_MEM: - printf("Err:Memory\n"); - break; //Not enough mem. - case TCPSOCKET_INUSE: - printf("Err:In use\n"); - break; //Interface / Port is in use. - case TCPSOCKET_EMPTY: - printf("Err:Empty\n"); - break; //Connections queue is empty. - case TCPSOCKET_RST: - printf("Err:Reset\n"); - break; //Connection was reset by remote host. - case TCPSOCKET_OK: - printf("Accepted: "); - break; //Success. - } - - link->setOnEvent(&onLinkSocketEvent); - clientIp = client.getIp(); - printf("Incoming TCP connection from %d.%d.%d.%d\r\n", - clientIp[0], clientIp[1], clientIp[2], clientIp[3]); - break; - case TCPSOCKET_READABLE: - printf("Readable\n"); - break; - - case TCPSOCKET_WRITEABLE: - printf("Writeable\n"); - break; - - case TCPSOCKET_CONTIMEOUT: - printf("Timeout\n"); - break; - - case TCPSOCKET_CONRST: - printf("Reset\n"); - break; - case TCPSOCKET_CONABRT: - printf("Aborted\n"); - break; - - case TCPSOCKET_ERROR: - printf("Error\n"); - break; - - case TCPSOCKET_DISCONNECTED: - printf("Disconnected\n"); - tcp.close(); - break; - } -} - -int main() { - //********Basic setup******** - printf("Welcome to wireFUSE\n"); - printf("Setting up...\n"); - EthernetErr ethErr = eth.setup(); - if (ethErr) { - printf("Error %d in setup.\n", ethErr); - return -1; - } - printf("Setup OK\n"); - //****End of basic setup***** - - tcp.setOnEvent(&onTCPSocketEvent); //Generate method to deal with requests - - //Bind to local port - printf("Init bind..\n"); - TCPSocketErr bindErr = tcp.bind(local); - switch (bindErr) { - case TCPSOCKET_SETUP: - printf("Err:Setup\n"); - break; //TCPSocket not properly configured. - case TCPSOCKET_TIMEOUT: - printf("Err:Timeout\n"); - break; //Connection timed out. - case TCPSOCKET_IF: - printf("Err:Interface\n"); - break; //Interface has problems, does not exist or is not initialized. - case TCPSOCKET_MEM: - printf("Err:Memory\n"); - break; //Not enough mem. - case TCPSOCKET_INUSE: - printf("Err:In use\n"); - break; //Interface / Port is in use. - case TCPSOCKET_EMPTY: - printf("Err:Empty\n"); - break; //Connections queue is empty. - case TCPSOCKET_RST: - printf("Err:Reset\n"); - break; //Connection was reset by remote host. - case TCPSOCKET_OK: - printf("Bound to port\n"); - break; //Success. - } - - //Listen to local port - printf("Init listen..\n"); - TCPSocketErr listenErr = tcp.listen(); - switch (listenErr) { - case TCPSOCKET_SETUP: - printf("Err:Setup\n"); - break; //TCPSocket not properly configured. - case TCPSOCKET_TIMEOUT: - printf("Err:Timeout\n"); - break; //Connection timed out. - case TCPSOCKET_IF: - printf("Err:Interface\n"); - break; //Interface has problems, does not exist or is not initialized. - case TCPSOCKET_MEM: - printf("Err:Memory\n"); - break; //Not enough mem. - case TCPSOCKET_INUSE: - printf("Err:In use\n"); - break; //Interface / Port is in use. - case TCPSOCKET_EMPTY: - printf("Err:Empty\n"); - break; //Connections queue is empty. - case TCPSOCKET_RST: - printf("Err:Reset\n"); - break; //Connection was reset by remote host. - case TCPSOCKET_OK: - printf("Listening\n"); - break; //Success. - } - Timer tmr; - tmr.start(); - while (1) { - Net::poll(); - if (tmr.read() > 10) { - tmr.reset(); - led1 = !led1; //Show that we are alive - //Wait for a connection request - printf("waiting for client on port 1234\n"); - } - } +#include "mbed.h" +#include "EthernetNetIf.h" +#include "TCPSocket.h" +#include "SocketUtil.h" + +EthernetNetIf eth; +DigitalOut led1(LED1); + +TCPSocket tcp; //The listening port where requests are queued +TCPSocket* link; //The port where accepted requests can communicate +Host local(IpAddr(), 1234); // mbed +Host client; + +void onLinkSocketEvent(TCPSocketEvent e) { + SocketEvent event = e; + printf(event); + + switch (event) { + case TCPSOCKET_READABLE: + char buf[128]; + while (int len = link->recv(buf, 128)) { + // And send straight back out again + link->send(buf, len); + buf[len] = 0; // make terminater + printf("Received & Wrote: %s\n",buf); + } + break; + case TCPSOCKET_DISCONNECTED: + link->close(); + break; + } +} + +void onTCPSocketEvent(TCPSocketEvent e) { + SocketEvent event = e; + printf(event); + + switch (event) { + case TCPSOCKET_ACCEPT: + if (SocketError err = tcp.accept(&client, &link)) { + printf(err); + } else { + link->setOnEvent(&onLinkSocketEvent); + IpAddr ip = client.getIp(); + printf("Incoming TCP connection from %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]); + } + break; + + case TCPSOCKET_DISCONNECTED: + tcp.close(); + break; + } +} + +int main() { + //Basic setup + printf("Welcome to wireFUSE\n"); + printf("Setting up...\n"); + EthernetErr ethErr = eth.setup(); + if (ethErr) + error("Error %d in setup.\n", ethErr); + printf("Setup OK\n"); + + tcp.setOnEvent(&onTCPSocketEvent); + + //Bind to local port + SocketError bindErr = tcp.bind(local); + printf("Init bind... %s", (char *) bindErr); + + //Listen to local port + TCPSocketErr listenErr = tcp.listen(); + printf("Init listen... %s", (char *)listenErr); + + Timer timer; + timer.start(); + while (true) { + Net::poll(); + if (timer.read() > 10) { + timer.reset(); + led1 = !led1; //Show that we are alive + printf("waiting for client on port 1234\n"); + } + } } \ No newline at end of file