我目前仍然通過Ubuntu在C編程一個簡單的客戶端服務器應用程序。到目前爲止,我的登錄功能似乎運行良好(在客戶端輸入一些文本,從服務器中的文件中抓取文本並驗證),但是這種特殊的顯示選項給我帶來了麻煩。從文件從服務器發送文本到客戶端的分段錯誤
服務器端代碼的一些片段(我抓起文件拷貝到其他站點下面的緩衝功能):
char bflag[1]; //mainmenu option recveived from client
char buffer[BUFSIZE+1]; //BUFSIZE is 1024
long lSize;
size_t result;
FILE * userf;
userf = fopen("Books.txt", "r+b");
recv(new_sockfd, bflag, BUFSIZE, 0); //receive flag from clientside
if ((strncmp (bflag, "a", 1)) == 0) //display flag received
{
fseek (userf , 0 , SEEK_END);
lSize = ftell (userf);
rewind (userf);
// copy the file into the buffer:
result = fread (buffer,1,lSize,userf);
send(new_sockfd, buffer, BUFSIZE, 0);
}
fclose(userf);
而在客戶端,利用開關的各種選項:
char bbuf[BUFSIZE+1]; //BUFSIZE is 1024
switch (mmenuc)
{
case 1:
{
strcpy (mmenuf, "a");
send (sockfd, mmenuf, BUFSIZE,0);//send flag 'a' to server
system("clear");
printf("Listing of books available:\n");
printf("O = Available X = Unavailable\n");
printf("\n");
recv (sockfd, bbuf, BUFSIZE,0);
printf ("%s", bbuf);
printf("\n");
getchar(); //eats the "\n"
getchar(); //to pause
break;
}
現在我面臨的問題是,文件中的所有文本都被檢索並出現在客戶端的終端上,但是在服務器端終端上,它給出了分段錯誤。 我假設有一個緩衝區溢出的地方,但我不知道是什麼導致它。 此外,Books.txt文件稍後用空格填充用於編輯功能。
什麼是例如'mmenuf'?如果它是例如'char mmenuf [1];'那麼你有一個緩衝區溢出。 –
文件大小是多少? –
另外,您不會將'bbuf'數組作爲一個字符串終止,因此打印它將繼續打印。而且您不會檢查是否有錯誤'recv'。 –