Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur 10038

Sujet résolu
    25 août 2007 à 16:39:56

    ass="nu0">1] = (char)(coord.x % 10);
         texte[2] = (char)(coord.y / 10);
         texte[3] = (char)(coord.y % 10);
    }


    merci d'avance à ceux qui auront la patience de me lire

    icare="co2">#include <winsock2.h>
    #include <windows.h>
    using namespace std;
    DWORD WINAPI threads(void* x);
    CRITICAL_SECTION Sync;
    struct thread_params
    {
           SOCKET sock;
    };
    int main()
    {
        cout << "demarrage du serveur" <<endl;
        WSADATA WSAData;//initialisation du WSAstartup
        WSAStartup(MAKEWORD(2,0), &WSAData);
        cout << "demarrage de WSAstartup" << endl;
        SOCKET sock_ecoute;//creation du socket d ecoute
        SOCKADDR_IN sin_ecoute;
        sock_ecoute = socket(AF_INET, SOCK_STREAM, 0);
        cout << "creation du socket" << endl;
        int port;
        cout << "reception au port : ";
        cin >> port;
        cout << endl;
        // Configuration de la connexion en serveur
        sin_ecoute.sin_addr.s_addr = htonl(INADDR_ANY);
        sin_ecoute.sin_family = AF_INET;
        sin_ecoute.sin_port = htons(port);
        cout << "socket configuree" << endl;
        bind(sock_ecoute, (SOCKADDR *)&sin_ecoute, sizeof(sin_ecoute));//association des infos
        cout << "association des informations au socket" << endl;
        listen(sock_ecoute, 5);//début de l'écoute
        cout << "debut de l'attente des client" << endl;
        SOCKET sock_mess;
        SOCKADDR_IN sin_mess;//paramétrage
        int poid = sizeof(sin_mess);
        thread_params parametre;
        HANDLE thread;
        sock_mess = accept(sock_ecoute, (SOCKADDR *) &sin_mess, &poid);
        cout << "client accepte" << endl;
        cout << "infos client :" << endl << "socket : " << sock_mess <<endl;
        cout << "adresse : " << inet_ntoa(sin_mess.sin_addr) << endl;
        cout << "port : " << htons(sin_mess.sin_port) << endl;
        //creation des threads
        parametre.sock = sock_mess;
        InitializeCriticalSection(&Sync);
        cout << "initialisation de la section critique" << endl;
        thread = CreateThread(NULL,0,threads,&parametre,0,0);
        Sleep(10);
        //fin du programme début des libérations
        cout << endl;
        system("PAUSE");
        cout << endl << "fermeture du serveur" << endl;
        closesocket(sock_ecoute);
        cout <<"fermeture du socket d ecoute" << endl;
        closesocket(sock_mess);
        cout <<"fermeture du socket de reception" << endl;
        WSACleanup();
        cout << "fermeture de WSA" <<endl;    
        TerminateThread(thread,0);
        cout << "thread n termine" << endl;
        cout << "serveur ferme" <<endl<<endl;
        system("PAUSE");
        return 0;
    }
    DWORD WINAPI threads(void* x)
    {
          EnterCriticalSection(&Sync);
          bool continuer = true;
          thread_params params;
          if(x!= NULL)
          {
                 struct thread_params *param = reinterpret_cast<struct thread_params *>(x);
                 thread_params params;
                 params.sock = param->sock;
                 cout << endl << "thread cree avec succes" << endl;
                 if(params.sock == SOCKET_ERROR)
                 {
                                continuer = false;
                                cout << "la creation du socket dans le threads a eu un probleme" << endl;
                 }
          }
          else
          {
              cout << "une erreur est survenue" << endl;
              continuer = false;
          }
          cout << endl;
          LeaveCriticalSection(&Sync);
          char message[5];
          while(continuer)
          {
                  if(recv(params.sock, message, sizeof(message), 0)!= SOCKET_ERROR)
                  {
                                      cout << "coord : " << message << endl;
                  }
                  else
                  {
                       shutdown(params.sock, 2);
                       continuer = false;
                       cout << "une erreur est survenue Erreur n" << WSAGetLastError() << endl;
                  }
          }
          cout << "fin du thread" << endl;
    }


    et le client :
    1. #include <iostream>
    2. #include <SDL/SDL.h>
    3. #include <winsock2.h>
    4. #include <windows.h>
    5.          #define CASE 15
    6.          #define LARGEUR 20
    7.          #define HAUTEUR 20
    8. void creermessage(SDL_Rect coord, char texte[]);
    9. int main(int argc, char *argv[])
    10. {
    11.     bool continuer = false;
    12.     SDL_Init(SDL_INIT_VIDEO);//on appelle la SDL
    13.     SDL_Surface *ecran;
    14.     SDL_Event event;
    15.     ecran = SDL_SetVideoMode(CASE * LARGEUR, CASE * HAUTEUR, 32, SDL_HWSURFACE || SDL_DOUBLEBUF);//initialisation de l'ecran
    16.     SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255,255,255));
    17.     SDL_Surface *joueur;
    18.     SDL_Rect posobjet;
    19.     posobjet.x = 5 * CASE;
    20.     posobjet.y = 5 * CASE;
    21.     joueur =  SDL_LoadBMP("images/joueur.bmp");//on charge le joueur
    22.     //sockets
    23.     WSADATA WSAData;//initialisation du WSAstartup
    24.     WSAStartup(MAKEWORD(2,0), &WSAData);
    25.     SOCKET sock_env;
    26.     SOCKADDR_IN sin_env;
    27.     sock_env = socket(AF_INET, SOCK_STREAM, 0);//creation de la socket
    28.     sin_env.sin_addr.s_addr =    inet_addr("127.0.0.1");//initialisation des parametres
    29.     sin_env.sin_family =         AF_INET;
    30.     sin_env.sin_port =           htons(5000);
    31.     int pre_message;
    32.     char message[5] ="";
    33.     if(connect(sock_env, (SOCKADDR *)&sin_env, sizeof(sin_env))!= SOCKET_ERROR)
    34.     {
    35.              continuer = true;
    36.              send(sock_env,message, sizeof(message),0);
    37.     }
    38.     while(continuer)//boucle evenementielle
    39.     {
    40.                     SDL_PollEvent(&event);
    41.                     switch(event.type)
    42.                     {
    43.                                case SDL_KEYDOWN:
    44.                                     switch(event.key.keysym.sym)
    45.                                     {
    46.                                                 case SDLK_w://déplacement haut (y)
    47.                                                      posobjet.y = posobjet.y - CASE;
    48.                                                      if(posobjet.y < 0){posobjet.y = 0;}//gestion de collision
    49.                                                      break;
    50.                                                 case SDLK_a://déplacement gauche (x)
    51.                                                      posobjet.x = posobjet.x - CASE;
    52.                                                      if(posobjet.x < 0){posobjet.x = 0;}//gestion de collision
    53.                                                      break;
    54.                                                 case SDLK_s://déplacement bas (y)
    55.                                                      posobjet.y = posobjet.y + CASE;
    56.                                                      if(posobjet.y >= CASE * HAUTEUR){posobjet.y = (HAUTEUR - 1)* CASE;}//gestion de collision
    57.                                                      break;
    58.                                                 case SDLK_d://déplacement droite (x)
    59.                                                      posobjet.x = posobjet.x + CASE;
    60.                                                      if(posobjet.x >= CASE * LARGEUR){posobjet.x = (LARGEUR - 1)* CASE;}//gestion de collision
    61.                                                      break;
    62.                                                 case SDLK_q://quitter
    63.                                                      continuer = false;
    64.                                                      break;
    65.                                     }
    66.                                     break;
    67.                     }
    68.                     creermessage(posobjet, message);
    69.                     send(sock_env,message, sizeof(message),0);
    70.                     SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255,255,255));
    71.                     SDL_BlitSurface(joueur, NULL, ecran, &posobjet);
    72.                     SDL_Flip(ecran);
    73.                     SDL_Delay(50);
    74.     }
    75.     //on ferme les sockets
    76.     closesocket(sock_env);
    77.     WSACleanup();
    78.     //on ferme la SDL
    79.     SDL_Flip(ecran);
    80.     SDL_FreeSurface(joueur);
    81.     SDL_FreeSurface(ecran);
    82.     SDL_Quit();
    83.     return 0;
    84. }
    85. void creermessage(SDL_Rect coord, char texte[])
    86. {
    87.      texte[0] = (char)(coord.y / 10);
    88.      texte[
    • Partager sur Facebook
    • Partager sur Twitter

    erreur 10038

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown