Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface mbed-rtos mbed
Fork of TCPSocket_HelloWorld by
Revision 13:25ce35614dd1, committed 2013-03-05
- Comitter:
- hsgw
- Date:
- Tue Mar 05 07:29:19 2013 +0000
- Parent:
- 12:7716b3728689
- Child:
- 14:607402be8868
- Child:
- 15:eae1575da9ca
- Commit message:
- 1st commit
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Mar 01 16:05:34 2013 +0000
+++ b/main.cpp Tue Mar 05 07:29:19 2013 +0000
@@ -1,31 +1,95 @@
#include "mbed.h"
#include "EthernetInterface.h"
+#include <stdio.h>
+#include <string.h>
-int main() {
- EthernetInterface eth;
+#define PORT 80
+
+EthernetInterface eth;
+
+TCPSocketServer svr;
+bool serverIsListened = false;
+
+TCPSocketConnection client;
+bool clientIsConnected = false;
+
+DigitalOut led1(LED1); //server listning status
+DigitalOut led2(LED2); //socket connecting status
+
+Ticker ledTick;
+
+void ledTickfunc()
+{
+ if(serverIsListened) {
+ led1 = !led1;
+ } else {
+ led1 = false;
+ }
+}
+
+int main (void)
+{
+ ledTick.attach(&ledTickfunc,0.5);
+
+ //setup ethernet interface
eth.init(); //Use DHCP
eth.connect();
- printf("IP Address is %s\n", eth.getIPAddress());
-
- TCPSocketConnection sock;
- sock.connect("mbed.org", 80);
-
- char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
- sock.send_all(http_cmd, sizeof(http_cmd)-1);
-
- char buffer[300];
- int ret;
- while (true) {
- ret = sock.receive(buffer, sizeof(buffer)-1);
- if (ret <= 0)
- break;
- buffer[ret] = '\0';
- printf("Received %d chars from server:\n%s\n", ret, buffer);
+ printf("IP Address is %s\n\r", eth.getIPAddress());
+
+ //setup tcp socket
+ if(svr.bind(PORT)< 0) {
+ printf("tcp server bind failed.\n\r");
+ return -1;
+ } else {
+ printf("tcp server bind successed.\n\r");
+ serverIsListened = true;
+ }
+
+ if(svr.listen(1) < 0) {
+ printf("tcp server listen failed.\n\r");
+ return -1;
+ } else {
+ printf("tcp server is listening...\n\r");
}
-
- sock.close();
-
- eth.disconnect();
-
- while(1) {}
+
+ //listening for http GET request
+ while (serverIsListened) {
+ if(svr.accept(client)<0) {
+ printf("failed to accept connection.\n\r");
+ } else {
+ printf("connection success!\n\rIP: %s\n\r",client.get_address());
+ clientIsConnected = true;
+ led2 = true;
+
+ while(clientIsConnected) {
+ char buffer[1024] = {};
+ switch(client.receive(buffer, 1023)) {
+ case 0:
+ printf("recieved buffer is empty.\n\r");
+ clientIsConnected = false;
+ break;
+ case -1:
+ printf("failed to read data from client.\n\r");
+ clientIsConnected = false;
+ break;
+ default:
+ printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
+ if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
+ printf("GET request incomming.\n\r");
+ //setup http response header & data
+ char echoHeader[256] = {};
+ sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
+ client.send(echoHeader,strlen(echoHeader));
+ client.send(buffer,strlen(buffer));
+ clientIsConnected = false;
+ printf("echo back done.\n\r");
+ }
+ break;
+ }
+ }
+ printf("close connection.\n\rtcp server is listening...\n\r");
+ client.close();
+ led2 = false;
+ }
+ }
}
