|
|
|
|
Bonjours,
je demande votre aide pour la création d'un prog client, et d'un prog serveur en C .... sous windows !
Oui, sous Unix / Linux c'est simple, mais sous windows c'est carément merdique !
J'utilise Microsoft Visual C++ 6.0. Je voudrais avoir un exemple de prog pour les deux cas (client et serveur) (ca c'est pas trop dur). J'en ai déjà un pour linux, et pour windows mais de dernier ne marche pas donc je prefere partir d'une autre base.. donc si vous avez...
Je voudrais également savoir ce qu'il faut rajouter à la compil et pour linker pour que ca marche car moi il me met (pour ceux que j'ai déjà fait) comme quoi le type 'SOCKET' est mal utilisé... et ce pour tout les types de données déclaré dans 'winsock2.h' !!
Je comprend pas trop alors si qqun a l'immense gentillesse de m'aider je l'en remercie beaucoup.
++
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~
Salut,
|
Salut, vas sur http://www.cppfrance.com tu y trouveras bcoup de code et il doit y avoir du code sur client serveur, tu fais une recherche, c'est une vrair base de données de code .
tafiscobar "lou waye def bopame"
|
Quelqun qui connait le C et le C++ :
#include <iostream>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
#define MAX_RQT 100;
int main(int argc, char *argv[])
{
int port;
printf("**********Serveur**********\n");
printf("Port que doit utiliser le serveur :");
scanf("%d",&port);
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == SOCKET_ERROR)
printf("erreur socket()\n");
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
if(bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR)
printf("erreur bind(): %d\n", WSAGetLastError());
if(listen(sock, 0) == SOCKET_ERROR)
printf("erreur listen(): %d\n", WSAGetLastError());
printf("Serveur en route...\nPort = %d\n",port);
while(1)
{
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
send(csock, "Bienvenue chez moi !\r\n", 23, 0);
}
}
system("PAUSE");
return 0;
}
J'ai beau essayé (au niveau des include ca bloque si je converti en C), j'y arrive pas !! Grand merci. ++ ~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic et ya pas de bôg môsieu ! ~ |
Répondre à m0n0-le-14r3
|
Bonjour kij,
#include <iostream> #pragma comment(lib, "ws2_32.lib") using namespace std; ensuite tu doit inclure dans le LINKER un parametre pour integrer la librairie WinSock2 (dans mon cas c'est "libwsock32.a"), mais ça pourrais etre "ws2_32.lib" pour toi, je ne sait pas! L'erreur est humaine mais un véritable désastre ne peut être qu'informatique.
|
Salut kij =)
#include <winsock2.h>
#define SERVEUR_CODE 1000
#define SER_ERROR SERVEUR_CODE + 1
#define SER_PORT_INVALIDE SERVEUR_CODE + 2
#define SER_SOCK_ERROR SERVEUR_CODE + 3
#define SER_LISTEN_ERROR SERVEUR_CODE + 4
int CServeur::Executer()
{
if (n_port==0) //on teste le numéro de port
return SER_PORT_INVALIDE;
//déclaration des variables
sockaddr_in client,serveur; //contiendra les infos : IP, famille et le port
int sock_serveur, sockclient; //n° de sockets
CString tempon;
sock_serveur = socket(AF_INET,SOCK_STREAM,0); //création du socket
if (sock_serveur==INVALID_SOCKET)
{
closesocket(sock_serveur);
return SER_SOCK_ERROR;
}
serveur.sin_family=AF_INET;
serveur.sin_addr.s_addr=inet_addr("127.0.0.1");
serveur.sin_port=htons(n_port);
int ret=bind(sock_serveur,(const sockaddr*)&serveur,sizeof(serveur));
if (ret!=0)
{
closesocket(sock_serveur);
return SER_SOCK_ERROR;
}
while (1)
{
ret=listen(sock_serveur,SOCK_STREAM); //attente de connexion
if (ret!=0)
{
closesocket(sock_serveur);
return SER_LISTEN_ERROR;
}
int addrlen=sizeof(client);
int sock_client=accept(sock_serveur,(sockaddr*)&client, &addrlen);
if (sock_client==INVALID_SOCKET)
{
closesocket(sock_serveur);
return SER_SOCK_ERROR;
}
char buf[256];
ret=recv(sock_client,buf,sizeof(buf),0);
if (ret==0)
{
closesocket(sock_serveur);
return SER_ERROR;
}
if (ret<255)
buf[ret+1]=0;
else
buf[ret]=0;
tempon.Format("%s",buf);
memcpy(buf,"Bienvenue sur Luffy Duck's Serveur !\n\n Veuillez vous identifier :",256);
send(sock_client,buf,sizeof(buf),0);
}
return 0;
}
<edit> arf je viens de voir qu'il y des CString dans le code... il faudra les remplacer par des char *. </edit> bon courage =) Le Parisien, il vaut mieux l'avoir en journal !!! :-P
|
Je sais pas ci cela va t'aider mais j'ai ça dans mes cours:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#define PORT 20100
void main()
{
int sk,addrlen,nbr;
struct sockaddr_in myaddr;
char buffer[40];
struct hostent *host_addr;
char retour[] = "Message retour du client";
//creation socket
if((sk=socket(AF_INET,SOCK_STREAM,0))== -1)
{
perror("prog client erreur appel socket");
}
host_addr=gethostbyname("localhost");
myaddr.sin_addr.s_addr=((struct in_addr *)(host_addr->h_addr))->s_addr;
myaddr.sin_port=PORT;
// myaddr.sin_port=htons(PORT);
myaddr.sin_family=AF_INET;
//demande de connexion
addrlen=sizeof(struct sockaddr_in);
if(connect(sk,(struct sockaddr*)&myaddr,addrlen)==-1)
{
perror("prog client erreur appel connect");
return;
}
//reception donnees
if((nbr=read(sk,buffer,40))==-1)
{
perror("erreur appel read");
}
printf("buffer recu: %s\n",buffer);
//repond au serveur
if((nbr=write(sk, retour,strlen(retour)+1))==-1)
{
perror("erreur appel write");
}
if(close (sk)==-1)
{
perror("erreur appel close");
}
}
COIN!
|
Répondre à sam3000
|
Salut kij :-)
WSADATA initialisation_win32;
ret=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
if (ret!=0)
printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",ret,WSAGetLastError());
else
printf("\nWSAStartup : OK");
++ Le Parisien, il vaut mieux l'avoir en journal !!! :-P |