the68
Messages postés6Date d'inscriptionmercredi 3 janvier 2007StatutMembreDernière intervention 5 juillet 2008
-
3 juil. 2008 à 13:13
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 2012
-
5 juil. 2008 à 11:21
Bonjour à tous,
Voilà je débute dans la programmation en C; j'ai suivis attentivement un tutoriel sur le C pour avoir les bases, et là je me lance dans la création d'un serveur + client mais j'ai des petits soucis; voilà la source du serveur mais je n'arrive pas à le compiler,j'ai des erreurs avec les variables; comment faire?
Merci de vos réponses, et soyez indulgent avec moi, je débute
#include <cstdlib>
#include
#include <winsock2.h>
void main()
{
long port=0;
printf ("port?/n");
scanf("%ld", port);
printf("le port est %ld", port);
while(true)
{
int sinsize = sizeof(csin);
if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
{
send(csock,"Vous etes connectes\r\n127.0.0.1 sur le port %ld\r\n\r\n",port,0);
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 3 juil. 2008 à 18:50
H:\programmation\démarrage.cpp:7: error: `main' must return `int' => remplacer le void main() par int main()sin.sin_port htons("%ld",port);> sin.sin_port = htons(port);
et transformer le long port; en unsignedshortint port;
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 4 juil. 2008 à 11:01
unsignedshortint c'est en 3 mots c'est unsigned short int.
Désolé c'est le copier coller qui a déconné.
unsigned short int c'est le type du parametre qui est demandé dans le prototype de la fonction htons.
Cdt
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 3 juil. 2008 à 15:56
Bonjour.
Tu peux nous donner les messages d'erreurs que tu as ?
Si tu fais du C pur n'oublie pas que les variables doivent être déclarées en début de blocs et que le type booléen n'existe pas
Cdt
the68
Messages postés6Date d'inscriptionmercredi 3 janvier 2007StatutMembreDernière intervention 5 juillet 2008 3 juil. 2008 à 16:44
Merci pour la réponse, j'ai déjà remarqué que j'ai oublié le "&" à la ligne printf("le port est %ld", port);
pour les erreurs voici le log, c'est en rapport avec les variables...
Compilateur: Default compiler
Exécution de g++.exe...
g++.exe "H:\programmation\démarrage.cpp" -o "H:\programmation\démarrage.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
H:\programmation\démarrage.cpp:7: error: `main' must return `int'
H:\programmation\démarrage.cpp: In function `int main(...)':
H:\programmation\démarrage.cpp:25: error: invalid conversion from `const char*' to `u_short'
C:/Dev-Cpp/include/winsock2.h:609: error: too many arguments to function `u_short htons(u_short)'
H:\programmation\démarrage.cpp:25: error: at this point in file
Exécution terminée
A +
Vous n’avez pas trouvé la réponse que vous recherchez ?
the68
Messages postés6Date d'inscriptionmercredi 3 janvier 2007StatutMembreDernière intervention 5 juillet 2008 4 juil. 2008 à 10:52
Merci pour la réponse :)
unsignedshortint port ça marche comment et ça correspond à quoi? Parceque ça me fait toujours un bug H:\programmation\démarrage.cpp:8: error: `unsignedshortint' undeclared (first use this function. J'ai déjà fait des recherches sur le net, mais n'ai pas trouvé grand chose...
A+
the68
Messages postés6Date d'inscriptionmercredi 3 janvier 2007StatutMembreDernière intervention 5 juillet 2008 4 juil. 2008 à 14:07
Bonjour =)
J'ai modifié tout celà maintenant, il n'y a plus d'erreurs de compilation, mais quand j'execute le programme, j'ai le droit à: Erreur de segmentation.
Quelqu'un peut m'expliquer??
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 4 juil. 2008 à 14:34
Erreur de segmentation c'est quand tu utilise des pointeurs qui vont lire à a des endroits ou il n'ont pas le droit. Vérifie les paramètres et les valeurs de retour de tes fonctions, rajouter des printf pour pouvoir debugger ton prog.
Bon courage.
ps: recréé un post quand tu aura localiser le bug si tu n'arrives pas à le corriger.
the68
Messages postés6Date d'inscriptionmercredi 3 janvier 2007StatutMembreDernière intervention 5 juillet 2008 4 juil. 2008 à 23:30
Merci pour la réponse;
j'ai maintenant le client et le serveur mais pourquoi le goto ne marche pas chez le serveur? parce que sa ne fonctionne qu'une fois (je n'arrive qu'à envoyer un seul message sans mettre le goto, avec le goto, il ne se passe rien sur le serveur...)
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 5 juil. 2008 à 00:39
N'utilise pas les goto, c'est hyper déconseillé pour faire un code clair. Utilise plutôt un while : c'est plus "propre".
N'aurais pas tu inversé le code du serveur et du client ? car le premier code "serveur" resemble plus à un code client.
Il faut boucler uniquement sur les receive,
//debut: // <==pas ici
char buffer[1024];
char buffer1[1024];
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
debut; // mais boucler a ce niveau, en remplacant ce goto par un while.
int i = recv(sock,buffer,sizeof(buffer),0);
recv(sock,buffer,sizeof(buffer1),0);
goto debut;
the68
Messages postés6Date d'inscriptionmercredi 3 janvier 2007StatutMembreDernière intervention 5 juillet 2008 5 juil. 2008 à 11:12
Je' ne voyait pas trop comment faire, donc j'ai gardé le goto;
mais sa ne fonctionne toujours pas, en fait, si je lance la partie devant réceptionner le message avant la partie ou j'écris le message, il ne se passe rien...