【发布时间】:2023-01-18 08:54:22
【问题描述】:
我正在从事一个包括服务器-客户端通信的项目。 我们的代码并非一直有效,有时它可以完美运行。但有时我们要么超时,要么我们的缓冲区不能正常工作。这就是我们要实现 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;
}
任何帮助表示赞赏! 最佳恩诺
【问题讨论】: