Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years ago.
WiflyInterface : Issue with int TCPSocketConnection::connect (const char* host, const int port)
Hi,
Clarification
Tried the Socket - int TCPSocketConnection::connect (const char* host, const int port) function that came with David WifiInterface Rev 70:83e420b0d3e1 and was not connecting, (David, thanks for the great work).
The original code from Rev 70:83e420b0d3e1 was :
int TCPSocketConnection::connect(const char* host, const int port) { if (!wifi->connect(host, port)) return -1; wifi->flush(); return 0; }
Was then replaced with that from Rev 11:002225507f44 - and it able to connect
int TCPSocketConnection::connect(const char* host, const int port) { //open the connection char cmd[30]; char rcv[40]; // if we cannot enter in cmd mode, maybe we have a tcp connection opened. // in this case we need to wait at least 0.25s to enter in cmd mode if (!wifi->cmdMode()) { wait(0.25); if (!wifi->cmdMode()) { wifi->send("\r", 1); wait(0.1); wifi->exit(); return -1; } } if (wifi->gethostbyname(host, rcv)) { sprintf(cmd, "set ip host %s\r", rcv); if (!wifi->sendCommand(cmd, "AOK")) return -1; } else { return -1; } sprintf(cmd, "set ip remote %d\r", port); if (!wifi->sendCommand(cmd, "AOK")) return -1; if (wifi->sendCommand("open\r", NULL, rcv)) { if (strstr(rcv, "OPEN") == NULL) { if (strstr(rcv, "Connected") != NULL) { if (!wifi->sendCommand("close\r", "CLOS")) return -1; if (!wifi->sendCommand(cmd, "OPEN")) return -1; } else { return -1; } } } else { return -1; } wifi->flush(); return 0; }
Thanks
1 Answer
9 years ago.
Hi Boy,
Well, for sure it was not my plans to reduce the capability. I'd like to ask two things -
- Edit your note above, and wrap it with
<<code>> <</code>>
, one just above your code, and the other just below. - Can you share the smallest sample program to demonstrate the behavior? I've got a project underway with the WiflyInterface module right now, so if I can replicate your issue, I will solve it.
Thanks, Dave
Hi Dave,
Thanks for the response.
Done as per item 1.
For Item 2, don't know is this what you are looking for.
wifly.flush(); // during first transmit while(ThingSock.connect(IPThingSpeak, 80)!= 0) // wait till TCP connect successful - 0 { wait(0.1); wifly.flush(); // during retransmit - to see still got missing gap z++; if(z == 5) { // *** Check is wifly still connected to wireless router *** // while(!wifly.is_connected()) // if not connected { wifly.disconnect(); wait(0.1); wifly.connect(); wait(0.1); } // *** End of auto recovery from lost association *** // z=-1; // -1 don;t sent data error = 1; // *** Debug Message *** // ClearScn(2.0); lcd.printf("\nTCP FAIL Count %d",ivalue); break; // Break from While Loop } }; wait(0.1); // wait for connection to settle down - to see still got missing gaps if(z != -1) // TCP connected and is within 5 tries { ThingSock.send_all(strPOST, (int)strlen(strPOST)); ThingSock.close(); // CLOSE HERE
Dave, I am not a real programmer, appreciate if you could patch your lib, and once again thanks for allowing me to use your lib, (great work). Oh, by the way, taking the hint from you, I have successfully include codes to re-connect wireless connection between Wifly and wireless router (association ???). Thanks !!!
Boy
posted by 20 Dec 2015
Hi,
Sorry, forgotten to post, my finding in consultation with Dave. There is a logic error in the TCPSocketConnection.cpp.
Thanks Dave
posted by Boy Crystal 23 Dec 2015