私は現在、Ubuntuを介してCで単純なクライアントサーバーアプリケーションをプログラミングしています。これまでのところ、私のログイン機能はうまく機能しているように見えます (クライアントにテキストを入力し、サーバーのファイルからテキストを取得して確認します) が、この特定の表示オプションが問題を引き起こしています。
サーバー側コードの一部のスニペット (別のサイトから以下の file copy to buffer 関数を取得しました):
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 ファイルには、後で編集するためのスペースが埋め込まれます。