it doesent work
Dependencies: EthernetNetIf mbed
Fork of TCP_server by
main.cpp@2:776a8f41728f, 2013-10-29 (annotated)
- Committer:
- wango
- Date:
- Tue Oct 29 23:05:06 2013 +0000
- Revision:
- 2:776a8f41728f
- Parent:
- 1:da09e6a94937
TCP SERVER FET10
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xshige | 0:c3fbb0514bfc | 1 | |
xshige | 0:c3fbb0514bfc | 2 | // TCP Echo server |
xshige | 1:da09e6a94937 | 3 | // 2010/9/7 |
xshige | 0:c3fbb0514bfc | 4 | |
xshige | 0:c3fbb0514bfc | 5 | |
xshige | 0:c3fbb0514bfc | 6 | /* |
xshige | 0:c3fbb0514bfc | 7 | |
xshige | 0:c3fbb0514bfc | 8 | (Execute Sample) |
xshige | 0:c3fbb0514bfc | 9 | PC side: |
xshige | 0:c3fbb0514bfc | 10 | telnet 192.168.0.25 12345 |
xshige | 0:c3fbb0514bfc | 11 | Trying 192.168.0.25... |
xshige | 0:c3fbb0514bfc | 12 | Connected to 192.168.0.25. |
xshige | 0:c3fbb0514bfc | 13 | Escape character is '^]'. |
xshige | 0:c3fbb0514bfc | 14 | |
xshige | 0:c3fbb0514bfc | 15 | mbed side: |
xshige | 0:c3fbb0514bfc | 16 | Setup OK |
xshige | 0:c3fbb0514bfc | 17 | mbed IP Address is 192.168.0.25 |
xshige | 0:c3fbb0514bfc | 18 | Binding.. |
xshige | 0:c3fbb0514bfc | 19 | Listening... |
xshige | 0:c3fbb0514bfc | 20 | Listening: TCP Socket Accepted |
xshige | 0:c3fbb0514bfc | 21 | Listening: Incoming TCP connection from 192.168.0.7 |
xshige | 0:c3fbb0514bfc | 22 | TCP Socket Readable |
xshige | 0:c3fbb0514bfc | 23 | Received&Wrote:test text |
xshige | 0:c3fbb0514bfc | 24 | |
xshige | 0:c3fbb0514bfc | 25 | TCP Socket Writable |
xshige | 0:c3fbb0514bfc | 26 | |
xshige | 0:c3fbb0514bfc | 27 | |
xshige | 0:c3fbb0514bfc | 28 | */ |
xshige | 0:c3fbb0514bfc | 29 | |
xshige | 0:c3fbb0514bfc | 30 | #include "mbed.h" |
xshige | 0:c3fbb0514bfc | 31 | #include "EthernetNetIf.h" |
xshige | 0:c3fbb0514bfc | 32 | #include "TCPSocket.h" |
xshige | 0:c3fbb0514bfc | 33 | |
xshige | 0:c3fbb0514bfc | 34 | DigitalOut led4(LED4, "led4"); |
wango | 2:776a8f41728f | 35 | DigitalOut led(LED1); |
xshige | 0:c3fbb0514bfc | 36 | |
xshige | 0:c3fbb0514bfc | 37 | // EthernetNetIf eth; |
xshige | 0:c3fbb0514bfc | 38 | EthernetNetIf eth( |
xshige | 0:c3fbb0514bfc | 39 | IpAddr(192,168,0,25), //IP Address |
xshige | 0:c3fbb0514bfc | 40 | IpAddr(255,255,255,0), //Network Mask |
xshige | 0:c3fbb0514bfc | 41 | IpAddr(192,168,0,1), //Gateway |
xshige | 0:c3fbb0514bfc | 42 | IpAddr(192,168,0,1) //DNS |
xshige | 0:c3fbb0514bfc | 43 | ); |
xshige | 0:c3fbb0514bfc | 44 | |
xshige | 0:c3fbb0514bfc | 45 | #define TCP_LISTENING_PORT 12345 |
xshige | 0:c3fbb0514bfc | 46 | |
xshige | 0:c3fbb0514bfc | 47 | TCPSocket ListeningSock; |
xshige | 0:c3fbb0514bfc | 48 | TCPSocket* pConnectedSock; // for ConnectedSock |
xshige | 0:c3fbb0514bfc | 49 | Host client; |
xshige | 0:c3fbb0514bfc | 50 | TCPSocketErr err; |
xshige | 0:c3fbb0514bfc | 51 | |
xshige | 0:c3fbb0514bfc | 52 | void onConnectedTCPSocketEvent(TCPSocketEvent e) |
xshige | 0:c3fbb0514bfc | 53 | { |
xshige | 0:c3fbb0514bfc | 54 | switch(e) |
xshige | 0:c3fbb0514bfc | 55 | { |
xshige | 0:c3fbb0514bfc | 56 | case TCPSOCKET_CONNECTED: |
xshige | 0:c3fbb0514bfc | 57 | printf("TCP Socket Connected\r\n"); |
xshige | 0:c3fbb0514bfc | 58 | break; |
xshige | 0:c3fbb0514bfc | 59 | case TCPSOCKET_WRITEABLE: |
xshige | 0:c3fbb0514bfc | 60 | //Can now write some data... |
xshige | 0:c3fbb0514bfc | 61 | printf("TCP Socket Writable\r\n"); |
xshige | 0:c3fbb0514bfc | 62 | break; |
xshige | 0:c3fbb0514bfc | 63 | case TCPSOCKET_READABLE: |
xshige | 0:c3fbb0514bfc | 64 | //Can now read dome data... |
xshige | 0:c3fbb0514bfc | 65 | printf("TCP Socket Readable\r\n"); |
xshige | 0:c3fbb0514bfc | 66 | // Read in any available data into the buffer |
xshige | 0:c3fbb0514bfc | 67 | char buff[128]; |
xshige | 0:c3fbb0514bfc | 68 | while ( int len = pConnectedSock->recv(buff, 128) ) { |
xshige | 0:c3fbb0514bfc | 69 | // And send straight back out again |
xshige | 0:c3fbb0514bfc | 70 | pConnectedSock->send(buff, len); |
xshige | 1:da09e6a94937 | 71 | buff[len]=0; // make terminater |
xshige | 0:c3fbb0514bfc | 72 | printf("Received&Wrote:%s\r\n",buff); |
xshige | 0:c3fbb0514bfc | 73 | } |
xshige | 0:c3fbb0514bfc | 74 | break; |
xshige | 0:c3fbb0514bfc | 75 | case TCPSOCKET_CONTIMEOUT: |
xshige | 0:c3fbb0514bfc | 76 | printf("TCP Socket Timeout\r\n"); |
xshige | 0:c3fbb0514bfc | 77 | break; |
xshige | 0:c3fbb0514bfc | 78 | case TCPSOCKET_CONRST: |
xshige | 0:c3fbb0514bfc | 79 | printf("TCP Socket CONRST\r\n"); |
xshige | 0:c3fbb0514bfc | 80 | break; |
xshige | 0:c3fbb0514bfc | 81 | case TCPSOCKET_CONABRT: |
xshige | 0:c3fbb0514bfc | 82 | printf("TCP Socket CONABRT\r\n"); |
xshige | 0:c3fbb0514bfc | 83 | break; |
xshige | 0:c3fbb0514bfc | 84 | case TCPSOCKET_ERROR: |
xshige | 0:c3fbb0514bfc | 85 | printf("TCP Socket Error\r\n"); |
xshige | 0:c3fbb0514bfc | 86 | break; |
xshige | 0:c3fbb0514bfc | 87 | case TCPSOCKET_DISCONNECTED: |
xshige | 0:c3fbb0514bfc | 88 | //Close socket... |
xshige | 0:c3fbb0514bfc | 89 | printf("TCP Socket Disconnected\r\n"); |
xshige | 0:c3fbb0514bfc | 90 | pConnectedSock->close(); |
xshige | 0:c3fbb0514bfc | 91 | break; |
xshige | 0:c3fbb0514bfc | 92 | default: |
xshige | 0:c3fbb0514bfc | 93 | printf("DEFAULT\r\n"); |
xshige | 0:c3fbb0514bfc | 94 | } |
xshige | 0:c3fbb0514bfc | 95 | } |
xshige | 0:c3fbb0514bfc | 96 | |
xshige | 0:c3fbb0514bfc | 97 | |
xshige | 0:c3fbb0514bfc | 98 | void onListeningTCPSocketEvent(TCPSocketEvent e) |
xshige | 0:c3fbb0514bfc | 99 | { |
xshige | 0:c3fbb0514bfc | 100 | switch(e) |
xshige | 0:c3fbb0514bfc | 101 | { |
xshige | 0:c3fbb0514bfc | 102 | case TCPSOCKET_ACCEPT: |
xshige | 0:c3fbb0514bfc | 103 | printf("Listening: TCP Socket Accepted\r\n"); |
xshige | 0:c3fbb0514bfc | 104 | // Accepts connection from client and gets connected socket. |
xshige | 0:c3fbb0514bfc | 105 | err=ListeningSock.accept(&client, &pConnectedSock); |
xshige | 0:c3fbb0514bfc | 106 | if (err) { |
xshige | 0:c3fbb0514bfc | 107 | printf("onListeningTcpSocketEvent : Could not accept connection.\r\n"); |
xshige | 0:c3fbb0514bfc | 108 | return; //Error in accept, discard connection |
xshige | 0:c3fbb0514bfc | 109 | } |
xshige | 0:c3fbb0514bfc | 110 | // Setup the new socket events |
xshige | 0:c3fbb0514bfc | 111 | pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent); |
xshige | 0:c3fbb0514bfc | 112 | // We can find out from where the connection is coming by looking at the |
xshige | 0:c3fbb0514bfc | 113 | // Host parameter of the accept() method |
xshige | 0:c3fbb0514bfc | 114 | IpAddr clientIp = client.getIp(); |
xshige | 0:c3fbb0514bfc | 115 | printf("Listening: Incoming TCP connection from %d.%d.%d.%d\r\n", |
xshige | 0:c3fbb0514bfc | 116 | clientIp[0], clientIp[1], clientIp[2], clientIp[3]); |
xshige | 0:c3fbb0514bfc | 117 | break; |
xshige | 0:c3fbb0514bfc | 118 | // the following cases will not happen |
xshige | 0:c3fbb0514bfc | 119 | case TCPSOCKET_CONNECTED: |
xshige | 0:c3fbb0514bfc | 120 | printf("Listening: TCP Socket Connected\r\n"); |
xshige | 0:c3fbb0514bfc | 121 | break; |
xshige | 0:c3fbb0514bfc | 122 | case TCPSOCKET_WRITEABLE: |
xshige | 0:c3fbb0514bfc | 123 | printf("Listening: TCP Socket Writable\r\n"); |
xshige | 0:c3fbb0514bfc | 124 | break; |
xshige | 0:c3fbb0514bfc | 125 | case TCPSOCKET_READABLE: |
xshige | 0:c3fbb0514bfc | 126 | printf("Listening: TCP Socket Readable\r\n"); |
xshige | 0:c3fbb0514bfc | 127 | break; |
xshige | 0:c3fbb0514bfc | 128 | case TCPSOCKET_CONTIMEOUT: |
xshige | 0:c3fbb0514bfc | 129 | printf("Listening: TCP Socket Timeout\r\n"); |
xshige | 0:c3fbb0514bfc | 130 | break; |
xshige | 0:c3fbb0514bfc | 131 | case TCPSOCKET_CONRST: |
xshige | 0:c3fbb0514bfc | 132 | printf("Listening: TCP Socket CONRST\r\n"); |
xshige | 0:c3fbb0514bfc | 133 | break; |
xshige | 0:c3fbb0514bfc | 134 | case TCPSOCKET_CONABRT: |
xshige | 0:c3fbb0514bfc | 135 | printf("Listening: TCP Socket CONABRT\r\n"); |
xshige | 0:c3fbb0514bfc | 136 | break; |
xshige | 0:c3fbb0514bfc | 137 | case TCPSOCKET_ERROR: |
xshige | 0:c3fbb0514bfc | 138 | printf("Listening: TCP Socket Error\r\n"); |
xshige | 0:c3fbb0514bfc | 139 | break; |
xshige | 0:c3fbb0514bfc | 140 | case TCPSOCKET_DISCONNECTED: |
xshige | 0:c3fbb0514bfc | 141 | //Close socket... |
xshige | 0:c3fbb0514bfc | 142 | printf("Listening: TCP Socket Disconnected\r\n"); |
xshige | 0:c3fbb0514bfc | 143 | ListeningSock.close(); |
xshige | 0:c3fbb0514bfc | 144 | break; |
xshige | 0:c3fbb0514bfc | 145 | default: |
xshige | 0:c3fbb0514bfc | 146 | printf("DEFAULT\r\n"); |
xshige | 0:c3fbb0514bfc | 147 | }; |
xshige | 0:c3fbb0514bfc | 148 | } |
xshige | 0:c3fbb0514bfc | 149 | |
xshige | 0:c3fbb0514bfc | 150 | |
xshige | 0:c3fbb0514bfc | 151 | int main() { |
xshige | 0:c3fbb0514bfc | 152 | printf("\r\n"); |
xshige | 0:c3fbb0514bfc | 153 | printf("Setting up...\r\n"); |
xshige | 0:c3fbb0514bfc | 154 | EthernetErr ethErr = eth.setup(); |
xshige | 0:c3fbb0514bfc | 155 | if(ethErr) |
xshige | 0:c3fbb0514bfc | 156 | { |
xshige | 0:c3fbb0514bfc | 157 | printf("Error %d in setup.\r\n", ethErr); |
xshige | 0:c3fbb0514bfc | 158 | return -1; |
xshige | 0:c3fbb0514bfc | 159 | } |
xshige | 0:c3fbb0514bfc | 160 | printf("Setup OK\r\n"); |
xshige | 0:c3fbb0514bfc | 161 | |
xshige | 0:c3fbb0514bfc | 162 | IpAddr ip = eth.getIp(); |
xshige | 0:c3fbb0514bfc | 163 | printf("mbed IP Address is %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]); |
xshige | 0:c3fbb0514bfc | 164 | |
xshige | 0:c3fbb0514bfc | 165 | |
xshige | 0:c3fbb0514bfc | 166 | // Set the callbacks for Listening |
xshige | 0:c3fbb0514bfc | 167 | ListeningSock.setOnEvent(&onListeningTCPSocketEvent); |
xshige | 0:c3fbb0514bfc | 168 | |
xshige | 0:c3fbb0514bfc | 169 | // bind and listen on TCP |
xshige | 0:c3fbb0514bfc | 170 | err=ListeningSock.bind(Host(IpAddr(), TCP_LISTENING_PORT)); |
xshige | 0:c3fbb0514bfc | 171 | printf("Binding..\r\n"); |
xshige | 0:c3fbb0514bfc | 172 | if(err) |
xshige | 0:c3fbb0514bfc | 173 | { |
xshige | 0:c3fbb0514bfc | 174 | //Deal with that error... |
xshige | 0:c3fbb0514bfc | 175 | printf("Binding Error\n"); |
xshige | 0:c3fbb0514bfc | 176 | } |
xshige | 0:c3fbb0514bfc | 177 | err=ListeningSock.listen(); // Starts listening |
xshige | 0:c3fbb0514bfc | 178 | printf("Listening...\r\n"); |
xshige | 0:c3fbb0514bfc | 179 | if(err) |
xshige | 0:c3fbb0514bfc | 180 | { |
xshige | 0:c3fbb0514bfc | 181 | printf("Listening Error\r\n"); |
xshige | 0:c3fbb0514bfc | 182 | } |
xshige | 0:c3fbb0514bfc | 183 | |
xshige | 0:c3fbb0514bfc | 184 | Timer tmr; |
xshige | 0:c3fbb0514bfc | 185 | tmr.start(); |
xshige | 0:c3fbb0514bfc | 186 | |
xshige | 0:c3fbb0514bfc | 187 | while(true) |
xshige | 0:c3fbb0514bfc | 188 | { |
xshige | 0:c3fbb0514bfc | 189 | Net::poll(); |
wango | 2:776a8f41728f | 190 | |
wango | 2:776a8f41728f | 191 | |
wango | 2:776a8f41728f | 192 | |
xshige | 0:c3fbb0514bfc | 193 | if(tmr.read() > 0.2) // sec |
xshige | 0:c3fbb0514bfc | 194 | { |
xshige | 0:c3fbb0514bfc | 195 | led4=!led4; //Show that we are alive |
xshige | 0:c3fbb0514bfc | 196 | tmr.reset(); |
xshige | 0:c3fbb0514bfc | 197 | } |
xshige | 0:c3fbb0514bfc | 198 | } |
xshige | 0:c3fbb0514bfc | 199 | } |