我目前仍在通过 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 文件用空格填充,以便稍后进行编辑。