pthread_create(&thread, NULL, message, (void *)&s);
void* message(void* data) /* Fonction de réception de message */ { char buff[1024]; SOCKET *s = (SOCKET *)data; char buff[1024]; int n; // ton main s'en fout de n recep *pStruct = (SOCKET *)data; while(1) /* boucle de réception des messages */ { memset(buff, '\0', sizeof(buff)); n = recv(*s, buff, sizeof(buff) - 1, 0); printf("%s\n",buff); } } /* Finc de la fonction de réception des messages
SOCKET s; // init sock ... pthread_t thread; pthread_create(&thread, NULL, message, (void *)&s);
void* message(void* data) { SOCKET *s = (SOCKET *)data; // attention c'est un pointeur .... }
void* message(void* data) /* Fonction de réception de message */ { SOCKET *s = (SOCKET *)data; char *buffer; int *n; while(1) /* boucle de réception des messages */ { memset(buffer, '\0', sizeof(buffer)); n = recv(s, buffer, sizeof(buffer) - 1, 0); printf("%s\n",buffer); } } /* Finc de la fonction de réception des messages */
C:\Dev-Cpp\chatbox_real\Client\main.c In function `message':
337 C:\Dev-Cpp\chatbox_real\Client\main.c [Warning] passing arg 1 of `recv' makes integer from pointer without a cast
337 C:\Dev-Cpp\chatbox_real\Client\main.c [Warning] assignment makes pointer from integer without a cast
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionstruct MaStructure { SOCKET *s; char *buffer; int *n; };
pthread_create(&thread, NULL, message, (struct *)&MaStructure);
struct MaStructure { SOCKET s; char buffer[mets ici un taille max]; int n; };
MaStructure datastruct; datastruct.s = ...; .... pthread_create(&thread, NULL, message, (struct *)&datastruct);
void* message(void* data) /* Fonction de réception de message */ { MaStructure *pStruct = (SOCKET *)data; while(1) /* boucle de réception des messages */ { memset(pStruct->buffer, '\0', sizeof(pStruct->buffer)); // là j'ai un doute sur le sizeof pStruct->n = recv(pStruct->s, pStruct->buffer, sizeof(pStruct->buffer) - 1, 0); printf("%s\n",pStruct->buffer); } } /* Finc de la fonction de réception des messages */
MaStructure datastruct; datastruct.s = ...;
MaStructure datastruct; datastruct.s = s; datastruct.b = buffer; datastruct.n = n;
while(1) { memset(buffer, '\0', sizeof(buffer)); n = recv(s_client, buffer, sizeof(buffer) - 1, 0); printf("%s\n",buffer); strcpy(buff, ("%s\n", buffer)); /*copi dans buff le buffer */ send(s_client, buff, (int)strlen(buff), 0); /*envoi le buff au client */ }
while(1) /* boucle de réception des messages */ { memset(buff, '\0', sizeof(buff)); // là j'ai un doute sur le sizeof n = recv(s, buff, sizeof(buff) - 1, 0); printf("%s\n",buff); }
struct recep { SOCKET *s; //je met des pointeurs car elles sont déjà dans main int *n; };
MaStructure datastruct; datastruct.s = ...; ....
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #include <string.h> #include <winsock2.h> #include static void purger(void) { int c; while ((c = getchar()) != '\n' && c != EOF) {} } static void clean (char *chaine) { char *p = strchr(chaine, '\n'); if (p) { *p = 0; } else { purger(); } } /*------------------------------------------*/ static void purgera(void) { int d; while ((d = getchar()) != '\n' && d != EOF) {} } static void cleaner (char *pseudo) { char *q = strchr(pseudo, '\n'); if (q) { *q = 0; } else { purgera(); } } void* message(void* data); int main(int argc, char *argv[]) { char chaine[5000]; char pseudo[30]; /* ---------------------------------------------------- */ WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) fprintf(stderr, "La fonction WSAStartup a echoue.\n"); else { SOCKET s; s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) fprintf(stderr, "La fonction socket a echoue.\n"); else { SOCKADDR_IN server; server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_port = htons(5050); memset(&server.sin_zero, '\0', sizeof(server.sin_zero)); if (connect(s, (SOCKADDR *)&server, sizeof(server)) == SOCKET_ERROR) fprintf(stderr, "La fonction connect a echoue.\n"); else { char buffer[1024]; int n; n = recv(s, buffer, sizeof(buffer) - 1, 0); if (n != SOCKET_ERROR) { buffer[n] = '\0'; printf("%s", buffer); /*-----------------------------------------------*/ struct recep { SOCKET *s; int *n; }; system("CLS"); printf("Choisissez un pseudo visible par les autre membres.\n\n"); printf("choix ? "); fgets(pseudo, sizeof pseudo, stdin); clean(pseudo); printf("\n\nBienvenu %s\n", pseudo); getch(); system("CLS"); /*-----------------------------------------------*/ pthread_t thread;/* crée un thread */ pthread_create(&thread, NULL, message, (void *)&datastruct);/* Permet d'exécuter le fonction message en parallèle, une erreur ici */ int compteur; for (compteur = 0 ; compteur < 2 ; compteur++) //obligé d'employer une boucle ici car la copie du buffer ne marhcait pas { snprintf(buffer, sizeof(buffer), "user: %s, rejoint la conversation.", pseudo); send(s, buffer, strlen(buffer), 0); } while (1) { /* début boucle wirthe */ printf("\n%s : ", pseudo); fgets(chaine, sizeof chaine, stdin); clean(chaine); snprintf(buffer, sizeof(buffer), "%s : %s ", pseudo, chaine); send(s, buffer, strlen(buffer), 0); if ( strcmp( chaine, "exit" ) == 0 ) { goto fin; /* je sais goto c'est pas bien mais c'est juste pour faire les testes en attendant :p */ } } /* fin boucle writhe */ pthread_join(thread, NULL); fin: send(s, "Au revoir\n", (int)strlen("Au revoir\n"), 0); } shutdown(s, SD_SEND); } closesocket(s); } WSACleanup(); } return 0; } void* message(void* data) /* Fonction de réception de message */ { char buff[1024]; recep *pStruct = (SOCKET *)data; while(1) /* boucle de réception des messages */ { memset(buff, '\0', sizeof(buff)); pStruct->n = recv(pStruct->s, buff, sizeof(buff) - 1, 0); printf("%s\n",buff); } } /* Finc de la fonction de réception des messages
C:\Dev-Cpp\chatbox_real\Client\main.c In function `main':
275 C:\Dev-Cpp\chatbox_real\Client\main.c `datastruct' undeclared (first use in this function)
(Each undeclared identifier is reported only once for each function it appears in.)
C:\Dev-Cpp\chatbox_real\Client\main.c In function `message':
336 C:\Dev-Cpp\chatbox_real\Client\main.c `recep' undeclared (first use in this function)
336 C:\Dev-Cpp\chatbox_real\Client\main.c `pStruct' undeclared (first use in this function)