SimpleSocket 1.0 examples
Dependencies: EthernetNetIf SimpleSocket 1.0 mbed
main.cpp@1:7350a2598a80, 2011-08-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |