客户端-服务器应用中使用malloc分配缓冲区的问题求助
客户端-服务器通信项目缓冲区问题求助
我正在开发一个包含客户端-服务器通信的项目。原代码并非始终正常运行,有时能完美工作,但有时会出现超时或缓冲区异常的情况。因此我尝试改用malloc()分配缓冲区,但修改后的代码完全无法运行。以下是使用malloc()前后的代码:
使用malloc()前的代码
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <stdbool.h> #include <unistd.h> #define BUFFERSIZE 1024 #define VERSION "VERSION 3.4\n" #include "functions.h" char buffer[BUFFERSIZE]; void resetBuffer(char *buffer) { memset((buffer), '\0', strlen(buffer)); } void receiveAnswer(int sock) { resetBuffer(buffer); size_t length; bool x = true; while (x) { recv(sock, buffer, sizeof(buffer), 0); length = strlen(buffer); if (buffer[length-1] == '\n') { x = false; } } if (buffer[0] == '-') { printf("Error: %s", buffer); } else { printf("%s\n ", buffer); } } void sendResponse(int sock, char *message) { resetBuffer(buffer); strcpy(buffer, message); bool x = true; size_t length; while(x) { send(sock, buffer, strlen(buffer), 0); length = strlen(buffer); if (buffer[length - 1] == '\n') { x = false; } } printf("Client: %s\n", buffer); } int performConnection(int sock, char *gameID) { receiveAnswer(sock); sleep(1); receiveAnswer(sock); sleep(1); sendResponse(sock, VERSION); sleep(1); receiveAnswer(sock); sleep(1); sendResponse(sock, gameID); sleep(1); receiveAnswer(sock); sleep(1); sendResponse(sock, "PLAYER \n"); sleep(1); receiveAnswer(sock); resetBuffer(buffer); return 0; }
使用malloc()后的代码
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <stdbool.h> #include <unistd.h> #define BUFFERSIZE 1024 #define VERSION "VERSION 3.4\n" #include "functions.h" char *buffer; void resetBuffer(char *buffer) { memset((buffer), '\0', strlen(buffer)); } void receiveAnswer(int sock) { resetBuffer(buffer); size_t length; bool x = true; while (x) { recv(sock, buffer, sizeof(buffer), 0); length = strlen(buffer); if (buffer[length-1] == '\n') { x = false; } } if (buffer[0] == '-') { printf("Error: %s", buffer); } else { printf("%s\n ", buffer); } } void sendResponse(int sock, char *message) { resetBuffer(buffer); strcpy(buffer, message); bool x = true; size_t length; while (x) { send(sock, buffer, strlen(buffer), 0); length = strlen(buffer); if (buffer[length - 1] == '\n') { x = false; } } printf("Client: %s\n", buffer); } int performConnection(int sock, char *gameID) { buffer = (char *)malloc(sizeof(char) * BUFFERSIZE); receiveAnswer(sock); sleep(1); receiveAnswer(sock); sleep(1); sendResponse(sock, VERSION); sleep(1); receiveAnswer(sock); sleep(1); sendResponse(sock, gameID); sleep(1); receiveAnswer(sock); sleep(1); sendResponse(sock, "PLAYER \n"); sleep(1); receiveAnswer(sock); resetBuffer(buffer); free(buffer); return 0; }
恳请各位提供帮助!
内容的提问来源于Stack Exchange,提问作者Enno Mühlbauer
相关产品推荐
相关产品推荐

