SimpleSocket 1.0 examples

Dependencies:   EthernetNetIf SimpleSocket 1.0 mbed

Committer:
yamaguch
Date:
Tue Aug 16 02:02:54 2011 +0000
Revision:
0:c41b68a4a296
Child:
1:7350a2598a80
initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:c41b68a4a296 1 #include "mbed.h"
yamaguch 0:c41b68a4a296 2 #include "EthernetNetIf.h"
yamaguch 0:c41b68a4a296 3 #include "TCPSocket.h"
yamaguch 0:c41b68a4a296 4
yamaguch 0:c41b68a4a296 5 EthernetNetIf eth;
yamaguch 0:c41b68a4a296 6 DigitalOut led1(LED1);
yamaguch 0:c41b68a4a296 7
yamaguch 0:c41b68a4a296 8
yamaguch 0:c41b68a4a296 9 TCPSocket tcp; //The listening port where requests are queued
yamaguch 0:c41b68a4a296 10 TCPSocket* link; //The port where accepted requests can communicate
yamaguch 0:c41b68a4a296 11 Host local(IpAddr(), 1234); // mbed
yamaguch 0:c41b68a4a296 12 Host client;
yamaguch 0:c41b68a4a296 13
yamaguch 0:c41b68a4a296 14 TCPSocketErr accErr;
yamaguch 0:c41b68a4a296 15
yamaguch 0:c41b68a4a296 16 void onLinkSocketEvent(TCPSocketEvent e) {
yamaguch 0:c41b68a4a296 17 switch (e) {
yamaguch 0:c41b68a4a296 18 case TCPSOCKET_CONNECTED:
yamaguch 0:c41b68a4a296 19 printf("TCP Socket Connected\r\n");
yamaguch 0:c41b68a4a296 20 break;
yamaguch 0:c41b68a4a296 21 case TCPSOCKET_WRITEABLE:
yamaguch 0:c41b68a4a296 22 //Can now write some data...
yamaguch 0:c41b68a4a296 23 printf("TCP Socket Writable\r\n");
yamaguch 0:c41b68a4a296 24 break;
yamaguch 0:c41b68a4a296 25 case TCPSOCKET_READABLE:
yamaguch 0:c41b68a4a296 26 //Can now read dome data...
yamaguch 0:c41b68a4a296 27 printf("TCP Socket Readable\r\n");
yamaguch 0:c41b68a4a296 28 // Read in any available data into the buffer
yamaguch 0:c41b68a4a296 29 char buff[128];
yamaguch 0:c41b68a4a296 30 while (int len = link->recv(buff, 128)) {
yamaguch 0:c41b68a4a296 31 // And send straight back out again
yamaguch 0:c41b68a4a296 32 link->send(buff, len);
yamaguch 0:c41b68a4a296 33 buff[len]=0; // make terminater
yamaguch 0:c41b68a4a296 34 printf("Received&Wrote:%s\r\n",buff);
yamaguch 0:c41b68a4a296 35 }
yamaguch 0:c41b68a4a296 36 break;
yamaguch 0:c41b68a4a296 37 case TCPSOCKET_CONTIMEOUT:
yamaguch 0:c41b68a4a296 38 printf("TCP Socket Timeout\r\n");
yamaguch 0:c41b68a4a296 39 break;
yamaguch 0:c41b68a4a296 40 case TCPSOCKET_CONRST:
yamaguch 0:c41b68a4a296 41 printf("TCP Socket CONRST\r\n");
yamaguch 0:c41b68a4a296 42 break;
yamaguch 0:c41b68a4a296 43 case TCPSOCKET_CONABRT:
yamaguch 0:c41b68a4a296 44 printf("TCP Socket CONABRT\r\n");
yamaguch 0:c41b68a4a296 45 break;
yamaguch 0:c41b68a4a296 46 case TCPSOCKET_ERROR:
yamaguch 0:c41b68a4a296 47 printf("TCP Socket Error\r\n");
yamaguch 0:c41b68a4a296 48 break;
yamaguch 0:c41b68a4a296 49 case TCPSOCKET_DISCONNECTED:
yamaguch 0:c41b68a4a296 50 //Close socket...
yamaguch 0:c41b68a4a296 51 printf("TCP Socket Disconnected\r\n");
yamaguch 0:c41b68a4a296 52 link->close();
yamaguch 0:c41b68a4a296 53 break;
yamaguch 0:c41b68a4a296 54 default:
yamaguch 0:c41b68a4a296 55 printf("DEFAULT\r\n");
yamaguch 0:c41b68a4a296 56 }
yamaguch 0:c41b68a4a296 57 }
yamaguch 0:c41b68a4a296 58
yamaguch 0:c41b68a4a296 59 void onTCPSocketEvent(TCPSocketEvent e) {
yamaguch 0:c41b68a4a296 60 IpAddr clientIp;
yamaguch 0:c41b68a4a296 61
yamaguch 0:c41b68a4a296 62 switch (e) {
yamaguch 0:c41b68a4a296 63 case TCPSOCKET_CONNECTED:
yamaguch 0:c41b68a4a296 64 printf("Connected\n");
yamaguch 0:c41b68a4a296 65 break;
yamaguch 0:c41b68a4a296 66
yamaguch 0:c41b68a4a296 67 case TCPSOCKET_ACCEPT:
yamaguch 0:c41b68a4a296 68 accErr = tcp.accept(&client,&link);
yamaguch 0:c41b68a4a296 69 switch (accErr) {
yamaguch 0:c41b68a4a296 70 case TCPSOCKET_SETUP:
yamaguch 0:c41b68a4a296 71 printf("Err:Setup\n");
yamaguch 0:c41b68a4a296 72 break; //TCPSocket not properly configured.
yamaguch 0:c41b68a4a296 73 case TCPSOCKET_TIMEOUT:
yamaguch 0:c41b68a4a296 74 printf("Err:Timeout\n");
yamaguch 0:c41b68a4a296 75 break; //Connection timed out.
yamaguch 0:c41b68a4a296 76 case TCPSOCKET_IF:
yamaguch 0:c41b68a4a296 77 printf("Err:Interface\n");
yamaguch 0:c41b68a4a296 78 break; //Interface has problems, does not exist or is not initialized.
yamaguch 0:c41b68a4a296 79 case TCPSOCKET_MEM:
yamaguch 0:c41b68a4a296 80 printf("Err:Memory\n");
yamaguch 0:c41b68a4a296 81 break; //Not enough mem.
yamaguch 0:c41b68a4a296 82 case TCPSOCKET_INUSE:
yamaguch 0:c41b68a4a296 83 printf("Err:In use\n");
yamaguch 0:c41b68a4a296 84 break; //Interface / Port is in use.
yamaguch 0:c41b68a4a296 85 case TCPSOCKET_EMPTY:
yamaguch 0:c41b68a4a296 86 printf("Err:Empty\n");
yamaguch 0:c41b68a4a296 87 break; //Connections queue is empty.
yamaguch 0:c41b68a4a296 88 case TCPSOCKET_RST:
yamaguch 0:c41b68a4a296 89 printf("Err:Reset\n");
yamaguch 0:c41b68a4a296 90 break; //Connection was reset by remote host.
yamaguch 0:c41b68a4a296 91 case TCPSOCKET_OK:
yamaguch 0:c41b68a4a296 92 printf("Accepted: ");
yamaguch 0:c41b68a4a296 93 break; //Success.
yamaguch 0:c41b68a4a296 94 }
yamaguch 0:c41b68a4a296 95
yamaguch 0:c41b68a4a296 96 link->setOnEvent(&onLinkSocketEvent);
yamaguch 0:c41b68a4a296 97 clientIp = client.getIp();
yamaguch 0:c41b68a4a296 98 printf("Incoming TCP connection from %d.%d.%d.%d\r\n",
yamaguch 0:c41b68a4a296 99 clientIp[0], clientIp[1], clientIp[2], clientIp[3]);
yamaguch 0:c41b68a4a296 100 break;
yamaguch 0:c41b68a4a296 101 case TCPSOCKET_READABLE:
yamaguch 0:c41b68a4a296 102 printf("Readable\n");
yamaguch 0:c41b68a4a296 103 break;
yamaguch 0:c41b68a4a296 104
yamaguch 0:c41b68a4a296 105 case TCPSOCKET_WRITEABLE:
yamaguch 0:c41b68a4a296 106 printf("Writeable\n");
yamaguch 0:c41b68a4a296 107 break;
yamaguch 0:c41b68a4a296 108
yamaguch 0:c41b68a4a296 109 case TCPSOCKET_CONTIMEOUT:
yamaguch 0:c41b68a4a296 110 printf("Timeout\n");
yamaguch 0:c41b68a4a296 111 break;
yamaguch 0:c41b68a4a296 112
yamaguch 0:c41b68a4a296 113 case TCPSOCKET_CONRST:
yamaguch 0:c41b68a4a296 114 printf("Reset\n");
yamaguch 0:c41b68a4a296 115 break;
yamaguch 0:c41b68a4a296 116 case TCPSOCKET_CONABRT:
yamaguch 0:c41b68a4a296 117 printf("Aborted\n");
yamaguch 0:c41b68a4a296 118 break;
yamaguch 0:c41b68a4a296 119
yamaguch 0:c41b68a4a296 120 case TCPSOCKET_ERROR:
yamaguch 0:c41b68a4a296 121 printf("Error\n");
yamaguch 0:c41b68a4a296 122 break;
yamaguch 0:c41b68a4a296 123
yamaguch 0:c41b68a4a296 124 case TCPSOCKET_DISCONNECTED:
yamaguch 0:c41b68a4a296 125 printf("Disconnected\n");
yamaguch 0:c41b68a4a296 126 tcp.close();
yamaguch 0:c41b68a4a296 127 break;
yamaguch 0:c41b68a4a296 128 }
yamaguch 0:c41b68a4a296 129 }
yamaguch 0:c41b68a4a296 130
yamaguch 0:c41b68a4a296 131 int main() {
yamaguch 0:c41b68a4a296 132 //********Basic setup********
yamaguch 0:c41b68a4a296 133 printf("Welcome to wireFUSE\n");
yamaguch 0:c41b68a4a296 134 printf("Setting up...\n");
yamaguch 0:c41b68a4a296 135 EthernetErr ethErr = eth.setup();
yamaguch 0:c41b68a4a296 136 if (ethErr) {
yamaguch 0:c41b68a4a296 137 printf("Error %d in setup.\n", ethErr);
yamaguch 0:c41b68a4a296 138 return -1;
yamaguch 0:c41b68a4a296 139 }
yamaguch 0:c41b68a4a296 140 printf("Setup OK\n");
yamaguch 0:c41b68a4a296 141 //****End of basic setup*****
yamaguch 0:c41b68a4a296 142
yamaguch 0:c41b68a4a296 143 tcp.setOnEvent(&onTCPSocketEvent); //Generate method to deal with requests
yamaguch 0:c41b68a4a296 144
yamaguch 0:c41b68a4a296 145 //Bind to local port
yamaguch 0:c41b68a4a296 146 printf("Init bind..\n");
yamaguch 0:c41b68a4a296 147 TCPSocketErr bindErr = tcp.bind(local);
yamaguch 0:c41b68a4a296 148 switch (bindErr) {
yamaguch 0:c41b68a4a296 149 case TCPSOCKET_SETUP:
yamaguch 0:c41b68a4a296 150 printf("Err:Setup\n");
yamaguch 0:c41b68a4a296 151 break; //TCPSocket not properly configured.
yamaguch 0:c41b68a4a296 152 case TCPSOCKET_TIMEOUT:
yamaguch 0:c41b68a4a296 153 printf("Err:Timeout\n");
yamaguch 0:c41b68a4a296 154 break; //Connection timed out.
yamaguch 0:c41b68a4a296 155 case TCPSOCKET_IF:
yamaguch 0:c41b68a4a296 156 printf("Err:Interface\n");
yamaguch 0:c41b68a4a296 157 break; //Interface has problems, does not exist or is not initialized.
yamaguch 0:c41b68a4a296 158 case TCPSOCKET_MEM:
yamaguch 0:c41b68a4a296 159 printf("Err:Memory\n");
yamaguch 0:c41b68a4a296 160 break; //Not enough mem.
yamaguch 0:c41b68a4a296 161 case TCPSOCKET_INUSE:
yamaguch 0:c41b68a4a296 162 printf("Err:In use\n");
yamaguch 0:c41b68a4a296 163 break; //Interface / Port is in use.
yamaguch 0:c41b68a4a296 164 case TCPSOCKET_EMPTY:
yamaguch 0:c41b68a4a296 165 printf("Err:Empty\n");
yamaguch 0:c41b68a4a296 166 break; //Connections queue is empty.
yamaguch 0:c41b68a4a296 167 case TCPSOCKET_RST:
yamaguch 0:c41b68a4a296 168 printf("Err:Reset\n");
yamaguch 0:c41b68a4a296 169 break; //Connection was reset by remote host.
yamaguch 0:c41b68a4a296 170 case TCPSOCKET_OK:
yamaguch 0:c41b68a4a296 171 printf("Bound to port\n");
yamaguch 0:c41b68a4a296 172 break; //Success.
yamaguch 0:c41b68a4a296 173 }
yamaguch 0:c41b68a4a296 174
yamaguch 0:c41b68a4a296 175 //Listen to local port
yamaguch 0:c41b68a4a296 176 printf("Init listen..\n");
yamaguch 0:c41b68a4a296 177 TCPSocketErr listenErr = tcp.listen();
yamaguch 0:c41b68a4a296 178 switch (listenErr) {
yamaguch 0:c41b68a4a296 179 case TCPSOCKET_SETUP:
yamaguch 0:c41b68a4a296 180 printf("Err:Setup\n");
yamaguch 0:c41b68a4a296 181 break; //TCPSocket not properly configured.
yamaguch 0:c41b68a4a296 182 case TCPSOCKET_TIMEOUT:
yamaguch 0:c41b68a4a296 183 printf("Err:Timeout\n");
yamaguch 0:c41b68a4a296 184 break; //Connection timed out.
yamaguch 0:c41b68a4a296 185 case TCPSOCKET_IF:
yamaguch 0:c41b68a4a296 186 printf("Err:Interface\n");
yamaguch 0:c41b68a4a296 187 break; //Interface has problems, does not exist or is not initialized.
yamaguch 0:c41b68a4a296 188 case TCPSOCKET_MEM:
yamaguch 0:c41b68a4a296 189 printf("Err:Memory\n");
yamaguch 0:c41b68a4a296 190 break; //Not enough mem.
yamaguch 0:c41b68a4a296 191 case TCPSOCKET_INUSE:
yamaguch 0:c41b68a4a296 192 printf("Err:In use\n");
yamaguch 0:c41b68a4a296 193 break; //Interface / Port is in use.
yamaguch 0:c41b68a4a296 194 case TCPSOCKET_EMPTY:
yamaguch 0:c41b68a4a296 195 printf("Err:Empty\n");
yamaguch 0:c41b68a4a296 196 break; //Connections queue is empty.
yamaguch 0:c41b68a4a296 197 case TCPSOCKET_RST:
yamaguch 0:c41b68a4a296 198 printf("Err:Reset\n");
yamaguch 0:c41b68a4a296 199 break; //Connection was reset by remote host.
yamaguch 0:c41b68a4a296 200 case TCPSOCKET_OK:
yamaguch 0:c41b68a4a296 201 printf("Listening\n");
yamaguch 0:c41b68a4a296 202 break; //Success.
yamaguch 0:c41b68a4a296 203 }
yamaguch 0:c41b68a4a296 204 Timer tmr;
yamaguch 0:c41b68a4a296 205 tmr.start();
yamaguch 0:c41b68a4a296 206 while (1) {
yamaguch 0:c41b68a4a296 207 Net::poll();
yamaguch 0:c41b68a4a296 208 if (tmr.read() > 10) {
yamaguch 0:c41b68a4a296 209 tmr.reset();
yamaguch 0:c41b68a4a296 210 led1 = !led1; //Show that we are alive
yamaguch 0:c41b68a4a296 211 //Wait for a connection request
yamaguch 0:c41b68a4a296 212 printf("waiting for client on port 1234\n");
yamaguch 0:c41b68a4a296 213 }
yamaguch 0:c41b68a4a296 214 }
yamaguch 0:c41b68a4a296 215 }