0

10ms ごとにソケットでテキスト ファイルを送信しようとしています。コードは正常に動作し、10 ミリ秒間隔でソケットを介してテキスト ファイルを送信し続けます。しかし、しばらくすると (3 ~ 4 分後など)、fopen() は失敗し (ただし、fopen() はしばらくの間は正常に動作します)、「Client2.exe の 0x011f28f7 で未処理の例外: 0xC00000FD: スタック オーバーフロー。 " で休憩

   test    dword ptr [eax],eax     ; probe page.

「chkstk.asm」にあります。

これの考えられる理由は何ですか?fopen() は、しばらくは正常に動作し、その後失敗するのはなぜですか?

私を助けてください :(

コード:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   char timer[1000];
    switch(msg)
      {      case WM_TIMER: 
            switch(wParam) 
               { 
                  case IDT_TIMER1: 
                   {        
                    FILE *fpSend ;
                    if((fpSend = fopen("Client4.txt", "r+b")) == NULL)
                    {
                  MessageBox( NULL,
                     "Unable to open the File",
                     "Error!",
                     MB_ICONEXCLAMATION | 
                     MB_OK);
              exit(EXIT_FAILURE);
                    }
   char file_buffer[100000];
   fseek(fpSend, 0, SEEK_END);
   size_t file_size = ftell(fpSend);
   fseek(fpSend, 0, SEEK_SET);
   if(file_size>0)   //if file size>0
      {
         int bytes_read=0;
         if((bytes_read=fread(file_buffer, file_size, 1, fpSend))<=0)
            {
            //"Unable to copy file into buffer",
            }
            //"File copied in Buffer",

         if(sendto(socketIdentifier, file_buffer, file_size, 0, (struct sockaddr *) &AH_glb_connectedSocket, sizeof(AH_glb_connectedSocket))<0)
            {
                //"Not Sent"
            }
         else
            {
                //"File Sent Successfully!",
                sendCount = sendCount+1;
                memset(file_buffer, 0, sizeof(file_buffer));
            }

               }
          break;
              default:
                 return 0;
               }
     break;
    }  
}

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
   //window created.

   while(GetMessage(&Msg, NULL, 0, 0) > 0)
      {         
         TranslateMessage(&Msg);
         DispatchMessage(&Msg);
      }
   return Msg.wParam;


   closesocket(socketIdentifier);
   WSACleanup();

   return 0;
}
4

1 に答える 1

4

ここには fclose() はありません。もしかしてリソース不足?

これはかなり似ています:

fopen が存在するファイルを開けないのはなぜですか?

fclose が実行されない場合、新しいファイル記述子は制限されているため、最終的にはそれらを見つけることができません。

于 2013-05-09T07:44:33.373 に答える