tcp socket client
Dependencies: EthernetInterface mbed-rtos mbed
Fork of TCPSocket_HelloWorld by
main.cpp@18:2eaa23c78a5b, 2016-09-11 (annotated)
- Committer:
- liutaitsung
- Date:
- Sun Sep 11 06:20:58 2016 +0000
- Revision:
- 18:2eaa23c78a5b
- Parent:
- 17:0d74817db362
TCP client
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
liutaitsung | 18:2eaa23c78a5b | 1 | // |
liutaitsung | 18:2eaa23c78a5b | 2 | // |
liutaitsung | 18:2eaa23c78a5b | 3 | // |
liutaitsung | 18:2eaa23c78a5b | 4 | |
donatien | 0:bb128f0e952f | 5 | #include "mbed.h" |
donatien | 0:bb128f0e952f | 6 | #include "EthernetInterface.h" |
donatien | 0:bb128f0e952f | 7 | |
liutaitsung | 18:2eaa23c78a5b | 8 | //#define USE_DHCP |
liutaitsung | 18:2eaa23c78a5b | 9 | |
liutaitsung | 18:2eaa23c78a5b | 10 | |
liutaitsung | 18:2eaa23c78a5b | 11 | const char cip[] = "192.168.2.89"; |
liutaitsung | 18:2eaa23c78a5b | 12 | const char cmask[] = "255.255.255.0"; |
liutaitsung | 18:2eaa23c78a5b | 13 | const char cgateway[] = "192.168.2.1"; |
liutaitsung | 18:2eaa23c78a5b | 14 | |
liutaitsung | 18:2eaa23c78a5b | 15 | //const char* ECHO_SERVER_ADDRESS = "192.168.2.2"; |
liutaitsung | 18:2eaa23c78a5b | 16 | const char* ECHO_SERVER_ADDRESS = "192.168.2.88"; |
liutaitsung | 18:2eaa23c78a5b | 17 | const int ECHO_SERVER_PORT = 7; |
liutaitsung | 18:2eaa23c78a5b | 18 | |
liutaitsung | 18:2eaa23c78a5b | 19 | |
liutaitsung | 18:2eaa23c78a5b | 20 | int iCount = 0; |
liutaitsung | 18:2eaa23c78a5b | 21 | #define ICOUNT_MAX 10000 |
liutaitsung | 18:2eaa23c78a5b | 22 | |
liutaitsung | 18:2eaa23c78a5b | 23 | |
liutaitsung | 18:2eaa23c78a5b | 24 | // |
liutaitsung | 18:2eaa23c78a5b | 25 | // |
liutaitsung | 18:2eaa23c78a5b | 26 | // |
liutaitsung | 18:2eaa23c78a5b | 27 | |
liutaitsung | 18:2eaa23c78a5b | 28 | Serial pc(USBTX, USBRX); |
liutaitsung | 18:2eaa23c78a5b | 29 | |
liutaitsung | 18:2eaa23c78a5b | 30 | |
liutaitsung | 18:2eaa23c78a5b | 31 | // |
liutaitsung | 18:2eaa23c78a5b | 32 | // |
liutaitsung | 18:2eaa23c78a5b | 33 | // |
liutaitsung | 18:2eaa23c78a5b | 34 | |
liutaitsung | 18:2eaa23c78a5b | 35 | int main() |
liutaitsung | 18:2eaa23c78a5b | 36 | { |
liutaitsung | 18:2eaa23c78a5b | 37 | pc.baud(115200); |
donatien | 0:bb128f0e952f | 38 | |
liutaitsung | 18:2eaa23c78a5b | 39 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 40 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 41 | pc.printf("--------------------------------\n"); |
liutaitsung | 18:2eaa23c78a5b | 42 | pc.printf("Program starts ...\n"); |
liutaitsung | 18:2eaa23c78a5b | 43 | |
donatien | 0:bb128f0e952f | 44 | |
liutaitsung | 18:2eaa23c78a5b | 45 | EthernetInterface eth; |
liutaitsung | 18:2eaa23c78a5b | 46 | |
liutaitsung | 18:2eaa23c78a5b | 47 | #ifdef USE_DHCP |
liutaitsung | 18:2eaa23c78a5b | 48 | //eth.init(); //Use DHCP |
liutaitsung | 18:2eaa23c78a5b | 49 | int init_rtn = eth.init(); //Use DHCP |
liutaitsung | 18:2eaa23c78a5b | 50 | #else |
liutaitsung | 18:2eaa23c78a5b | 51 | |
liutaitsung | 18:2eaa23c78a5b | 52 | // fix ip address |
liutaitsung | 18:2eaa23c78a5b | 53 | |
liutaitsung | 18:2eaa23c78a5b | 54 | int init_rtn = eth.init(cip, //const char * ip, |
liutaitsung | 18:2eaa23c78a5b | 55 | cmask, //const char * mask, |
liutaitsung | 18:2eaa23c78a5b | 56 | cgateway //const char * gateway |
liutaitsung | 18:2eaa23c78a5b | 57 | ); |
liutaitsung | 18:2eaa23c78a5b | 58 | |
liutaitsung | 18:2eaa23c78a5b | 59 | #endif |
liutaitsung | 18:2eaa23c78a5b | 60 | |
liutaitsung | 18:2eaa23c78a5b | 61 | |
liutaitsung | 18:2eaa23c78a5b | 62 | pc.printf("init() return : %d\n", init_rtn); |
liutaitsung | 18:2eaa23c78a5b | 63 | |
liutaitsung | 18:2eaa23c78a5b | 64 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 65 | pc.printf(" wait for ethernet connect()......\n"); |
liutaitsung | 18:2eaa23c78a5b | 66 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 67 | |
liutaitsung | 18:2eaa23c78a5b | 68 | int connect_rtn = eth.connect(); |
liutaitsung | 18:2eaa23c78a5b | 69 | pc.printf("connect() return : %d\n", connect_rtn); |
emilmont | 7:65188f4a8c25 | 70 | |
liutaitsung | 18:2eaa23c78a5b | 71 | //eth.connect(); |
liutaitsung | 18:2eaa23c78a5b | 72 | pc.printf("\nClient IP Address is %s\n", eth.getIPAddress()); |
liutaitsung | 18:2eaa23c78a5b | 73 | |
liutaitsung | 18:2eaa23c78a5b | 74 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 75 | pc.printf(" connect to tcp socket server......\n"); |
liutaitsung | 18:2eaa23c78a5b | 76 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 77 | |
liutaitsung | 18:2eaa23c78a5b | 78 | |
liutaitsung | 18:2eaa23c78a5b | 79 | // Connect to Server |
liutaitsung | 18:2eaa23c78a5b | 80 | TCPSocketConnection socket; |
liutaitsung | 18:2eaa23c78a5b | 81 | |
liutaitsung | 18:2eaa23c78a5b | 82 | send_loop: |
liutaitsung | 18:2eaa23c78a5b | 83 | |
liutaitsung | 18:2eaa23c78a5b | 84 | while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) |
liutaitsung | 18:2eaa23c78a5b | 85 | { |
liutaitsung | 18:2eaa23c78a5b | 86 | pc.printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); |
liutaitsung | 18:2eaa23c78a5b | 87 | wait(2); |
emilmont | 7:65188f4a8c25 | 88 | } |
liutaitsung | 18:2eaa23c78a5b | 89 | |
liutaitsung | 18:2eaa23c78a5b | 90 | pc.printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS); |
liutaitsung | 18:2eaa23c78a5b | 91 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 92 | |
liutaitsung | 18:2eaa23c78a5b | 93 | // Send message to server |
liutaitsung | 18:2eaa23c78a5b | 94 | char hello[] = "Hello World"; |
liutaitsung | 18:2eaa23c78a5b | 95 | pc.printf("Sending message to Server : '%s' \n",hello); |
liutaitsung | 18:2eaa23c78a5b | 96 | |
liutaitsung | 18:2eaa23c78a5b | 97 | int isend_all_rtn = socket.send_all(hello, sizeof(hello) - 1); |
liutaitsung | 18:2eaa23c78a5b | 98 | pc.printf("chars send : %d\n", isend_all_rtn); |
liutaitsung | 18:2eaa23c78a5b | 99 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 100 | |
liutaitsung | 18:2eaa23c78a5b | 101 | // Receive message from server |
liutaitsung | 18:2eaa23c78a5b | 102 | char buf[256]; |
liutaitsung | 18:2eaa23c78a5b | 103 | int n = socket.receive(buf, 256); |
liutaitsung | 18:2eaa23c78a5b | 104 | buf[n] = '\0'; // end of line |
liutaitsung | 18:2eaa23c78a5b | 105 | |
liutaitsung | 18:2eaa23c78a5b | 106 | pc.printf("Received message from server: '%s'\n", buf); |
donatien | 0:bb128f0e952f | 107 | |
liutaitsung | 18:2eaa23c78a5b | 108 | // Clean up |
liutaitsung | 18:2eaa23c78a5b | 109 | //socket.close(); |
liutaitsung | 18:2eaa23c78a5b | 110 | int iclose = socket.close(); |
liutaitsung | 18:2eaa23c78a5b | 111 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 112 | pc.printf("sock.close return : %d\n", iclose); |
liutaitsung | 18:2eaa23c78a5b | 113 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 114 | |
liutaitsung | 18:2eaa23c78a5b | 115 | iCount++; |
liutaitsung | 18:2eaa23c78a5b | 116 | pc.printf("send # : %d\n", iCount); |
donatien | 5:01f6c3e112af | 117 | |
liutaitsung | 18:2eaa23c78a5b | 118 | if ( iCount < ICOUNT_MAX ) |
liutaitsung | 18:2eaa23c78a5b | 119 | { |
liutaitsung | 18:2eaa23c78a5b | 120 | wait(3); |
liutaitsung | 18:2eaa23c78a5b | 121 | |
liutaitsung | 18:2eaa23c78a5b | 122 | goto send_loop; |
liutaitsung | 18:2eaa23c78a5b | 123 | |
liutaitsung | 18:2eaa23c78a5b | 124 | } |
liutaitsung | 18:2eaa23c78a5b | 125 | |
liutaitsung | 18:2eaa23c78a5b | 126 | |
liutaitsung | 18:2eaa23c78a5b | 127 | eth.disconnect(); |
liutaitsung | 18:2eaa23c78a5b | 128 | int idisconn = eth.disconnect(); |
liutaitsung | 18:2eaa23c78a5b | 129 | |
liutaitsung | 18:2eaa23c78a5b | 130 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 131 | pc.printf("disconnect return : %d\n", idisconn); |
liutaitsung | 18:2eaa23c78a5b | 132 | |
liutaitsung | 18:2eaa23c78a5b | 133 | |
liutaitsung | 18:2eaa23c78a5b | 134 | pc.printf("--------------------------------\n"); |
liutaitsung | 18:2eaa23c78a5b | 135 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 136 | pc.printf("\n"); |
liutaitsung | 18:2eaa23c78a5b | 137 | |
liutaitsung | 18:2eaa23c78a5b | 138 | while(true) {} |
donatien | 0:bb128f0e952f | 139 | } |
yihui | 17:0d74817db362 | 140 | |
yihui | 17:0d74817db362 | 141 | // override the default weak function to provide a specific mac address |
yihui | 17:0d74817db362 | 142 | extern "C" void mbed_mac_address(char *mac) |
yihui | 17:0d74817db362 | 143 | { |
liutaitsung | 18:2eaa23c78a5b | 144 | mac[0] = 0x00; |
liutaitsung | 18:2eaa23c78a5b | 145 | mac[1] = 0x50; |
liutaitsung | 18:2eaa23c78a5b | 146 | mac[2] = 0x56; |
liutaitsung | 18:2eaa23c78a5b | 147 | mac[3] = 0xC0; |
liutaitsung | 18:2eaa23c78a5b | 148 | mac[4] = 0x00; |
yihui | 17:0d74817db362 | 149 | mac[5] = 0xAB; |
yihui | 17:0d74817db362 | 150 | }; |