TCPTest Server attempt

Dependencies:   EthernetNetIf mbed

Committer:
OTBsolar
Date:
Tue Mar 15 16:08:17 2011 +0000
Revision:
1:7785624d8f35
Parent:
0:f8aba92e4c46
slightly less beta

Who changed what in which revision?

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