我有一個大學的項目,我必須實施迭代服務器。如何清理使用read()填充的緩衝區並繼續讀取相同的緩衝區?
服務器使用教授給出的協議,用幾句話說,客戶端必須以特定的形式發送消息,我的服務器必須進行一些解析以便將某些數據保存在全局結構中。
我使用函數read()
來接收消息並將其存儲在固定大小的char數組中。我的問題是,有時候這個消息可能比我用來存儲它的緩衝區的大小要大。 注意:我無法首先發送消息的大小以繞過此問題。
我想知道是否有辦法做到這一點。
貝婁是一些代碼:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include "keyvalue.h"
#include <errno.h>
int main (int argc, char *argv[])
{
char keyvaluebuffer[4096];
int num;
//socket()
//bind()
//listen()
while(1)
{
//accept()
while((num = read(acceptfd, keyvaluebuffer, 4096)) > 0)
{
//At this point I use the keyvaluebuffer to parse it and store the data.
}//while (read > 0) end
if (num < 0){close(accept);}
close(accept);
}//while(1) end
close(socket);
}//main end
是否有某些原因不會動態分配'keyvaluebuffer',根據需要重新分配? –
@DavidBowling在一般情況下,我寧願與靜態數組解決方案,因爲它是我完全理解,但我想知道他們是否是一種方法來解決這個問題,使用malloc()。 – arkas
問題是什麼?爲什麼你不能使用更大的緩衝區?注意這裏沒有'靜態數組'。這是一個局部變量。 – EJP