bonjour je suis actuellement en IUT info et G un projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte au serveur le serveur doit lui renvoyer un msg quelconque apre plusieur test j'ai finalement trouver que le probleme venait du send du coter serveur et donc par consequent le recv du coter client ne marche pas non plus donc si quelqu'un peut m'aider un peut
voici mon code du coter serveur
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 59999
int main(int argc, char *argv[])
{
char * phrasep;
char phrase;
printf("quelle phrase voulez-vous envoyer?\n");
scanf("%s",&phrase);
phrasep=malloc(sizeof(phrase));
WSADATA wsaDat;
SOCKET ConnectSocket, Client;
STARTUPINFO si;
PROCESS_INFORMATION pi;
SOCKADDR_IN csin;
int sin_size=sizeof(csin);
char * ch = "connexion serveur Ok.";
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if(WSAStartup(MAKEWORD(2,0),&wsaDat) != 0) //makeword(2.0) specifie la version de winsock utilisé
return EXIT_FAILURE;
// ouverture socket
SOCKET sock;
SOCKADDR_IN sin;
//sin.sin_addr.s_addr etant donnée que nous somme sur le serveur on ne met pas
//d'adresse car le serveur n'a pas a connaitre l'adresse des clients
sin.sin_addr.s_addr = htonl(INADDR_ANY);
//sin.sin_family indique le type de socket utilisé pour le net on utilise le plus souvent AF_INET
sin.sin_family = AF_INET;
//sin.sin_port definie le numero du port a utilisé pour communiquer avec le client
sin.sin_port = PORT;
// la creation réelle du socket ce fait ici il faut rapeller le type de socket utiliser comme au prealable
//SOCK_STREAM veut dire ouvrent une conn entre les 2 ordinateurs directe et pourra ensuite envoyer les paquets
// que vous désirez, tandis que le SOCK_DGRAM envoie un paquet directement à la destination sans faire d'accept() ou de connect()
sock = socket(AF_INET,SOCK_STREAM,0);
//commande qui permet de rattacher le socket directement au port et a l'adresse configurer au prealable
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("salut comment ca va ");
system("pause");
struct sockaddr_in service;
// spécification de la partie locale
// liaison à la socket
// boucle d'attente de connexion
// connexion et envoi du message au client
listen(sock, 3); //limitation du nombre de connexions à 3
int val = 0; //variable qui va stocké la valeur de retour qui nous indiquera si la connection est bien accepter
val = accept(sock, (SOCKADDR *)&sin, &sin_size);
if(val != INVALID_SOCKET)
{
// Fonctions à éxécuter sur le socket.
int valid=send(sock,phrasep ,5, 0);
printf("%i",valid);
system("pause");
}
WSACleanup();
return EXIT_SUCCESS;
}
et mon code du coter client :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 59999
int main(int argc, char *argv[])
{
char msg;
char *servIP;
char cadr;
printf("a quelle adresse ip voulez vous vous connectez?");
scanf("%s",&cadr);
servIP = &cadr;
WSADATA wsaDat;
SOCKET Sock, Client;
STARTUPINFO si;
PROCESS_INFORMATION pi;
SOCKADDR_IN s_in;
int s_in_size, n,valid;
char buff[255];
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if(WSAStartup(MAKEWORD(2,0),&wsaDat) != 0)
return EXIT_FAILURE;
// creation socket
// spécification adresse IP et port serveur
// connexion au serveur
// reception message et affichage
// ouverture socket
SOCKET sock;
SOCKADDR_IN sin;
//sin.sin_addr.s_addr specifie l'adresse de connection
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
//sin.sin_family indique le type de socket utilisé pour le net on utilise le plus souvent AF_INET
sin.sin_family = AF_INET;
//sin.sin_port definie le numero du port a utilisé pour communiquer avec le client
sin.sin_port = PORT;
// la creation réelle du socket ce fait ici il faut rapeller le type de socket utiliser comme au prealable
//SOCK_STREAM veut dire ouvrent une conn entre les 2 ordinateurs directe et pourra ensuite envoyer les paquets
// que vous désirez, tandis que le SOCK_DGRAM envoie un paquet directement à la destination sans faire d'accept() ou de connect()
sock = socket(AF_INET,SOCK_STREAM,0);
//commande qui permet de rattacher le socket directement au port et a l'adresse configurer au prealable
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
valid=connect(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("%i",valid);
valid=recv(sock, buff, sizeof(buff), 0);
printf("avant\n");
printf("%s\n%i\n",buff,valid);
printf("apres\n");
closesocket(Sock);
WSACleanup();
system("PAUSE");
return EXIT_SUCCESS;
}
merci bien de votre aide