Network communication simulator using WINSOCK
(client side)
Recently, in the process of embedded project, I learned winsock network programming. The main content of project is to simulate the whole process through c language before migrating to stm32. The process includes: a client device and a sensor device as a server are connected through TCP protocol, and the sensor terminal is controlled by inputting different instructions from the client terminal
For example, the start command wakes up the sensor;
After wake-up, input any instruction to obtain the temperature value returned by the sensor (here is random number generation);
After waking up, input quit to exit the connection and end the simulation process.
Here are some instructions:
1. As the client, the code is divided into communication module and control module.
2. Considering that the TCP protocol connects through three handshakes, which helps to ensure the stability of the communication between the sensor and the client, we use TCP communication instead of the recommended UDP communication, so the large-scale code in the code part is the communication module.
3. The control module is to identify the returned data of the sensor (in fact, it is to determine the range of the returned value, because the project is relatively simple, only one level is set here)
4. In this code, the temperature value returned by the sensor is only the value between 35.0-42.9 generated by random number, which is the actual value detected by the temperature sensor in the MCU development board version.
Add: the complete source code of the project has been update d to gitee, and subsequent improvements will be carried out gradually. If you are interested, you can have a look gitee connection
Thank you for completing CSDN of Wang classmate in charge of MCU part of the project Personal space , Zhang and Sima in charge of GUI
Article link of sensor: https://blog.csdn.net/capodexi/article/details/106801975
This part is the source code of client side
#include "stdio.h" #include<WINSOCK2.h> #include<string> #include<iostream> #include<tchar.h> #pragma comment(lib,"WS2_32.lib") #define BUF_SIZE 64 //Set header file, library file and constant (buffer size) int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsd; SOCKET sHost; SOCKADDR_IN servAddr; char buf[BUF_SIZE]; int retVal; //Declare variables required by the program if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) { printf("WSAStartup failed! \n"); return 1; } //Initializing the Socket environment sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == sHost) { printf("socket failed! \n"); WSACleanup(); return -1; } //Create Socket on client side servAddr.sin_family = AF_INET; servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.110.117"); servAddr.sin_port = htons(9990); int sServerAddlen = sizeof(servAddr); //Set server socket address retVal = connect(sHost, (LPSOCKADDR)&servAddr, sizeof(servAddr)); if (retVal == SOCKET_ERROR) { printf("connect failed!\n"); closesocket(sHost); WSACleanup(); return -1; } //Connect to server while (1) { printf("Please enter the information passed to the server:"); std::string str; //Send data to server std::getline(std::cin, str); ZeroMemory(buf, BUF_SIZE); strcpy(buf, str.c_str());//Copy the input data to buf area retVal = send(sHost, buf, strlen(buf), 0); if (SOCKET_ERROR == retVal) { printf("send failed! \n"); closesocket(sHost); WSACleanup(); return -1; }//send function debug retVal = recv(sHost, buf, sizeof(buf)+1, 0); printf("Recv From Server: %s\n", buf);//Receive data from server if ((buf[0] == '3' && buf[1] > '6') || buf[0] == '4') { printf("WARNING! Abnormal temperature, please check\n "); } //Temperature detection, if more than 37, alarm if (strcmp(buf, "quit") == 0) { printf("quit! \n"); break; } } //Communication between server and client closesocket(sHost); WSACleanup(); system("pause"); return 0; }
Production is not easy, thank you for your support!