logo Homepage
+  NewbieContest
|-+  Programmation» Langages compilés» [C] problème de socket
Username:
Password:
Pages: [1] 2
  Imprimer  
Auteur Fil de discussion: [C] problème de socket  (Lu 13250 fois)
Invit
Invité
« le: 01 Août 2007 à 16:19:21 »

Voici les erreurs...

(http://wmv.ifrance.com/socket.gif)

Que faire ?
Journalisée
frok

Profil challenge

Classement : 1371/55017

Membre Junior
**
Hors ligne Hors ligne
Messages: 70


Voir le profil
« #1 le: 01 Août 2007 à 16:55:11 »

tiens je sais pas si ça peut t'aider
Code:
#include <stdio.h>
#include <winsock.h>
#include <string.h>

#ifndef SD_SEND
#define SD_SEND 1
#endif

bool init_winsock(void) {
   WSAData Data;
   int Code;

   if((Code=WSAStartup(MAKEWORD(1, 1),&Data)) != 0) {
      printf("erreur dans WSAStartup() : %d\n", Code);
      return false;
   }
   return true;
}

SOCKET etablir_connexion(u_long adresse_distante, u_short port) {
   sockaddr_in sinDistant;
   SOCKET sd = socket(AF_INET, SOCK_STREAM, 0);

   if(sd!=INVALID_SOCKET) {
       sinDistant.sin_family = AF_INET;
       sinDistant.sin_addr.s_addr = adresse_distante;
       sinDistant.sin_port = port;
       if(connect(sd,
         (sockaddr*)&sinDistant,
         sizeof(sockaddr_in))==SOCKET_ERROR)
             sd = INVALID_SOCKET;
  }
  return sd;
}

u_long resoudre_adresse(char* hote) {
   hostent* pHE;
   u_long adresse_distante = inet_addr(hote);

   if(adresse_distante == INADDR_NONE) {
      pHE = gethostbyname(hote);
      if(pHE == 0) return INADDR_NONE;
      adresse_distante = *((u_long*)pHE->h_addr_list[0]);
   }
   return adresse_distante;
}

int main(void) {
char *Hote = "newbiecontest.free.fr";
int Port = 80;
    int req;
   
init_winsock();

u_long adresse;
SOCKET sd;
char *requete;
char tampon;

// Trouver l'adresse de l'hôte
printf("Recherche de l'hôte... [%s]\n", Hote);
adresse = resoudre_adresse(Hote);
if(adresse==INADDR_NONE) {
  printf("Echec !\n");
  return 3;
}

printf("Connexion en cours !\n");
sd = etablir_connexion(adresse, htons(Port));
if(sd!=INVALID_SOCKET) printf("Connecté !\n");

// envoi de la requête
requete="GET /ep15/index.php HTTP/1.1\r\nHost: newbiecontest.free.fr\r\nAccept: */*\r\n\r\n";
req=send(sd, requete, strlen(requete)+1,0);

// réception de la réponse
while(recv(sd,&tampon,1,0)!=0) {
         printf("%c", tampon);
}
// quitter correctement winsock
shutdown(sd, SD_SEND);
closesocket(sd);
WSACleanup();

   
    system("PAUSE");
}
Journalisée
Invit
Invité
« #2 le: 01 Août 2007 à 17:42:42 »

Non, je ne veux pas envoyer de requêtes http
je veus crée un client et un serveur le problème
c'est qu'il y a des erreurs avec Code::Block...


code copier du site

[http://www.iprezo.org/index.php?page=sockc]

Code:
Code Client (TCP - socket bloquante)

#include <stdio.h>    // printf
#include <conio.h>    // getch()
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);

SOCKET sock;
SOCKADDR_IN sin;
char buffer[255];

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family    = AF_INET;
sin.sin_port    = htons(4444);

connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    memset(buffer,0,255);
recv(sock, buffer, sizeof(buffer), 0);
    printf("%s",buffer);
    getch();
closesocket(sock);
WSACleanup();
}

Code Serveur (TCP - socket bloquante)

#include <stdio.h>    // printf
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

void main()
{
char buffer[255];

WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);

SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family    = AF_INET;
sin.sin_port    = htons(4444);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);

while(1)
{
  int sinsize = sizeof(csin);
  if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
  {
      memset(buffer,0,255);
        wsprintf(buffer,"Bienvenu sur mon serveur ;)");
        send(csock,buffer,255,0);
  }
}
}
Journalisée
Folcan

Profil challenge

Classement : 511/55017

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1520


Voir le profil
« #3 le: 02 Août 2007 à 08:46:55 »

En C, il faut laisser une ligne vide à la fin de ton code.

Apparement ton erreur viens de la.
Journalisée

-=[FoLc@N]=-

Citation :
* Le futur appartient à ceux qui croient à la beauté de leurs rêves, je crois au miens, NewbieContest aura un bon futur.
* Il y'a seulement 10 categories de gens dans la vie : ceux qui comprennent le binaire, et les autres.
_o_
Relecteur

Profil challenge

Classement : 43/55017

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #4 le: 02 Août 2007 à 09:18:19 »

Citation de: Folcan
En C, il faut laisser une ligne vide à la fin de ton code.
Pas que je sache, non. Ca doit être une spécificité de son compilateur. en tout cas, gcc n'en a pas besoin.

Edit: curieux, puisque Code::Blocks utilise gcc par défaut.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
phoenix1204

Profil challenge

Classement : 79/55017

Membre Complet
***
Hors ligne Hors ligne
Messages: 105


Voir le profil
« #5 le: 02 Août 2007 à 13:52:45 »

Et pourtant si, c'est une des guidelines des standards ANSI/ISO C (http://gcc.gnu.org/ml/gcc/2003-11/msg01568.html) :
Citation
A source file that is not empty shall end in a new-line character, which shall not be immediately preceded by a backslash character.
J'avais lu en son temps une autre explication qui disait que toute ligne de code doit se terminer par un retour de chariot... Quoi qu'il en soit c'est un warning, i.e. cela n'empêche en aucun cas la compilation et n'a aucune répercussion sur l'exécution. La vérité est ailleurs
Journalisée

___________________________________________________
In God we Trust -- all others must submit an X.509 certificate.
_o_
Relecteur

Profil challenge

Classement : 43/55017

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #6 le: 02 Août 2007 à 14:34:23 »

Citation de: phoenix1204
Et pourtant si, c'est une des guidelines des standards ANSI/ISO C
Rhooooo ! gcc ne suit pas les standards ?
Avec -ansi et -pedantic, il ne râle toujours pas (oui, j'ai -Wall également). Je dois louper quelque chose.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
Invit
Invité
« #7 le: 02 Août 2007 à 15:31:04 »

Je serais plus pour la cause du compilateur parceque j'ai essayer aussi visual C++ 2005
mais lui aussi me renvoye des erreurs...

Que faire ?
Journalisée
lilxam
Profil challenge

Classement : 134/55017

Membre Complet
***
Hors ligne Hors ligne
Messages: 154


Voir le profil WWW
« #8 le: 02 Août 2007 à 18:15:30 »

Ce serait bien de voir ta 27eme ligne voire tout ton code. Sinon pour le "Syntax error at end of input" tu oublie peutetre de fermer une acolade. Et pour la ligne vide à la fin ce n'est pas forcément nécessaire, le code sera quand meme compilé.
Journalisée

Pourquoi faire simple quand on peut faire compliquer ?
phoenix1204

Profil challenge

Classement : 79/55017

Membre Complet
***
Hors ligne Hors ligne
Messages: 105


Voir le profil
« #9 le: 02 Août 2007 à 18:32:08 »

Citation de: _o_
Rhooooo ! gcc ne suit pas les standards ?
Avec -ansi et -pedantic, il ne râle toujours pas (oui, j'ai -Wall également). Je dois louper quelque chose.
Qui a dit que j'utilisais une distrib de lamerz ?
Code:
[phoenix@home tmp]$ gcc -o test test.c
test.c:3:2: warning: no newline at end of file
[phoenix@home tmp]$ echo -e '\n' >> test.c
[phoenix@home tmp]$ gcc -o test test.c
[phoenix@home tmp]$
Journalisée

___________________________________________________
In God we Trust -- all others must submit an X.509 certificate.
_o_
Relecteur

Profil challenge

Classement : 43/55017

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #10 le: 02 Août 2007 à 18:42:12 »

Citation de: phoenix1204
Qui a dit que j'utilisais une distrib de lamerz ?
_o/ Et je le maintiens.

Bon, après vérification, c'est mon éditeur de texte qui ajoute systématiquement un retour-chariot mais qui ne l'affiche pas (vim pour ne pas le nommer). Je ne suis pas fou.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
Invit
Invité
« #11 le: 03 Août 2007 à 15:33:48 »

Code:
Ce serait bien de voir ta 27eme ligne voire tout ton code
ben regarde ci-dessus il y a tout mon code source

([http://www.iprezo.org/index.php?page=sockc])

J'ai une nouvelle info sur mon problème après une compilation avec visual C++ 2005

Code:
1>c:\documents and settings\********\mes documents\visual studio 2005\projects\o\o\o.cpp(4) : fatal error C1083: Impossible d'ouvrir le fichier include : 'winsock2.h' : No such file or directory
Journalisée
Folcan

Profil challenge

Classement : 511/55017

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1520


Voir le profil
« #12 le: 03 Août 2007 à 19:23:11 »

Tout simplement qu'il ne trouve pas la librairie winsock2.h

A voir si elle est par default dans visual C++
Sinon, a downloader sur le net.
Journalisée

-=[FoLc@N]=-

Citation :
* Le futur appartient à ceux qui croient à la beauté de leurs rêves, je crois au miens, NewbieContest aura un bon futur.
* Il y'a seulement 10 categories de gens dans la vie : ceux qui comprennent le binaire, et les autres.
_o_
Relecteur

Profil challenge

Classement : 43/55017

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #13 le: 03 Août 2007 à 19:36:02 »

Citation de: Folcan
A voir si elle est par default dans visual C++
Sinon, a downloader sur le net.
La réponse est sur le site publiant ce code source. Au paragraphe «1ère étape».
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
Invit
Invité
« #14 le: 03 Août 2007 à 21:09:28 »

Non, je suis retourner sur Code::Block ensuite j'ai regarder les librairies winsock2.h étais dans la liste...
Journalisée
Pages: [1] 2
  Imprimer  
 
Aller à: