/******************************************************************** * receive_handler: * * thread that handles all incoming communication from the server * ********************************************************************/ void *receive_handler(void *arg) { printf("receive thread created\n"); int socket_desc; struct sockaddr_in server; //Create socket socket_desc = socket(AF_INET , SOCK_STREAM , 0); if (socket_desc == -1) error("Could not create socket"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_port = htons(SERVER_PORT); server.sin_addr.s_addr = inet_addr(getServerIp()); int read_size = 0; /****************** Receiving superloop ******************/ while(1) { printf("Connecting to server...\n"); while( connect(socket_desc, (struct sockaddr*)&server, sizeof(server)) < 0 ) { printf("Connection failed, retry in 5 seconds\n"); sleep(5); } printf("Connected!\n"); // Continuously read from server while connection is active while( (read_size = recv(socket_desc , messageFromServer , MSG_SIZE , 0)) > 0 ) { messageFromServer[read_size] = '\0'; printf("Server-->Pi: %s\n", messageFromServer); parseServerMessage(); } // Server disconnection if(read_size == 0) { printf("Server disconnected\n"); } else if(read_size == -1) { error("recv failed\n"); } // Close then reinit the socket and attempt reconnect to server close(socket_desc); socket_desc = socket(AF_INET , SOCK_STREAM , 0); } return 0; }
int main(void) { Clear_home(); initBuffer(); rBuf = readBuffer; wBuf = writeBuffer; (void) Cconws("STiNG test...\r\n"); BYTE found = Supexec (find_STiNG); if(!found) { sleep(3); return 0; } getServerIp(); WORD whichTests = 0; while(whichTests == 0) { showMenu(); char req = Cnecin(); if(req >= 'A' && req <= 'Z') req += 32; // to upper case if(req == 'q') break; // quit switch(req) { case 'a': // all tests whichTests = 0xffff; break; case 's': whichTests = 0x8000; break; case '0': case '1': case '2': case '3': whichTests = 1 << (req - '0'); } } if(whichTests & 1) doTest00(); if(whichTests & 2) doTest01(); if(whichTests & 4) doTest02(); if(whichTests & 8) doTest03(); if(whichTests & 0x8000) doSpeedTest(); if(whichTests != 0) writeBufferToFile(); deinitBuffer(); sleep(3); return 0; }
int sendMessage(const char* str, int len) { if(len < 1) error("Message length < 1"); if(len != strlen(str)) printf("WARNING: length of string does not match length passed to function\n"); int socket_desc; // socket fd struct sockaddr_in server; // server info to connect to //Create a TCP socket socket_desc = socket(AF_INET , SOCK_STREAM , 0); if (socket_desc == -1) error("Could not create socket\n"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_port = htons(SERVER_PORT); // Set port number to connect to server.sin_addr.s_addr = inet_addr(getServerIp()); // Attempt connection if( connect(socket_desc, (struct sockaddr*)&server, sizeof(server)) < 0) { printf("sendMessage: Cannot connect to server\n"); return 0; } else // Connection succeeded { printf("Pi-->Server: %s\n", str); //Debug printf if(write(socket_desc, str, len) < 1) error("Writing to socket"); // Close and reinitialize the socket descriptor if(close(socket_desc) < 0) error("Closing socket"); } return 1; }