Bonjour,
Alors voilà, j'essaie de faire un chat multi-clients graphique en C.
J'ai déjà fait plusieurs petits programmes utilisant les sockets et tous fonctionnent normalement sous Windows avec la librairie winsock2.h .
De même j'ai déjà un peu testé gtk+ sans aucun soucis. Mais là, je ne comprends pas... Mon programme fonctionne très bien si je n'inclue pas winsock2.h et à partir du moment ou je l'inclue j'ai une étrange erreur (que je n'avais pas sur les autres programmes).
Voici l'erreur ou plutôt les erreurs:
C'est comme si j'avais fait une erreur de syntaxe alors que non... J'ai bien vérifié et en plus de ça, si je n'inclue pas winsock2.h je n'ai aucun soucis de compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|22|warning: useless storage class specifier in empty declaration| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c||In function 'main':| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|35|error: expected '{' before ';' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|35|error: two or more data types in declaration specifiers| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|54|error: expected '{' before '.' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|57|error: expected '{' before '.' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|58|error: expected '{' before '.' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|59|error: expected '{' before '.' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|60|error: expected '{' before '.' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|63|error: expected '{' before '.' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|63|error: expected expression before ')' token| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|63|warning: type defaults to 'int' in declaration of 'type name'| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|67|error: expected expression before 'struct'| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c||In function 'testPseudo':| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|87|error: expected identifier or '(' before 'struct'| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|88|error: expected expression before 'struct'| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|89|error: expected expression before 'struct'| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|90|error: expected expression before 'struct'| C:\Users\Amandine\Documents\Informatique\Projets C\MiniChatC-client\main.c|91|warning: initialization discards qualifiers from pointer target type| ||=== Build finished: 14 errors, 3 warnings ===|
Et mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 #include "compatibilite.h" #define PORT 4149 #define TAILLE_MAX_BUFFER 500 #define TAILLE_MAX_NOM 20 void testPseudo(GtkWidget *widget, gpointer data); typedef struct Interface_s Interface_s; static struct Interface_s{ GtkWidget *fenetrePseudo; GtkWidget *textBoxPseudo; GtkWidget *boutonContinuer; GtkWidget *boutonQuitter; GtkWidget *fenetrePrincipale; char *text; }; int main (int argc, char ** argv) { #if defined (WIN32) WSADATA WSAData; int erreur = WSAStartup(MAKEWORD(2,2), &WSAData); #else int erreur = 0; #endif if(!erreur){ Interface_s interface; GtkBuilder *builder = NULL; GError *p_err = NULL; ///// Initialisation de GTK+ ///// gtk_init (&argc, &argv); ///// Creation d'un nouveau GtkBuilder ///// builder = gtk_builder_new(); if (builder != NULL) { ///// Chargement du XML dans builder ///// gtk_builder_add_from_file(builder, "interface.xml", &p_err); if (p_err == NULL) { ///// Recuparation des pointeurs sur window1 (fenetrePrincipale). ///// interface.fenetrePrincipale = (GtkWidget*)gtk_builder_get_object(builder, "window1"); ///// Recuparation des pointeurs sur dialog1 (fenetrePseudo). ///// interface.fenetrePseudo = (GtkWidget*)gtk_builder_get_object(builder, "dialog1"); interface.boutonContinuer = (GtkWidget*)gtk_builder_get_object(builder, "button2"); interface.boutonQuitter = (GtkWidget*)gtk_builder_get_object(builder, "button3"); interface.textBoxPseudo = (GtkWidget*)gtk_builder_get_object(builder, "entry2"); ///// Signal bouton Continuer de fenetrePseudo ///// g_signal_connect(GTK_OBJECT(interface.boutonContinuer), "clicked", G_CALLBACK(testPseudo), (gpointer)&interface); ///// Signal bouton Quitter de fenetrePseudo ///// // g_signal_connect(GTK_OBJECT(interface.boutonQuitter), "clicked", G_CALLBACK(continuerChat), (gpointer)&interface); gtk_widget_show_all(interface.fenetrePseudo); gtk_main (); } else { ///// Affichage du message d'erreur de GTK+ ///// g_error ("%s", p_err->message); g_error_free (p_err); } } } #if defined (WIN32) WSACleanup(); #endif return EXIT_SUCCESS; }Ça fait déjà plusieurs jours que je me casse les dents sur ce problème et je ne vois vraiment pas de solutions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #if defined (WIN32) #include <winsock2.h> typedef int socklen_t; #elif defined (linux) #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define closesocket(s) close(s) typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #endif #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <string.h>² #include <gtk/gtk.h>
Une idée d'où ça peut venir?
Merci d'avance![]()
Partager