begin process at 2012 05 30 17:31:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

les sockets seulement en réseau ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

les sockets seulement en réseau ?

mercredi 7 juillet 2004 à 18:10:03 | les sockets seulement en réseau ?

Gabi

Bon, avant selon moi, les sockets pouvaient être utilisés par internet. Rien de plus logiques. Mais là j'ai programmé un squelette de chat avec les sockets et selon mes tests ca ne serait pas vrai. En effet, la connexion entre mon server et mon client ne se fait qu'avec une adresse ip locale. Par contre, ça m'étonne beaucoup. Je voudrais donc le savoir une fois pour toute.

Est-ce que winsock sert seulement à faire des connexions en réseau ?
mercredi 7 juillet 2004 à 18:43:08 | Re : les sockets seulement en réseau ?

aardman

Membre Club
Salut,
Les sockets ne servent qu'a ca, etablir des connexions en reseau et "par internet".
mercredi 7 juillet 2004 à 19:42:51 | Re : les sockets seulement en réseau ?

racpp

Administrateur CodeS-SourceS
salut ,
Les sockets peuvent fonctionner sur un même ordinateur ayant une seule et unique adresse IP. Mais il me semble qu'ils fonctionnent beaucoup mieux sur un réseau local ou internet. Je m'explique : Pour faire les premiers essais sur une application client/serveur, j'étais obligé de tester les 2 programmes sur un même ordinateur (celui utilisé pour la programmation en vc++). Au début, ça marchait parfaitement bien. Mais au fur et à mesure que le programme se compliquait, je commencais à avoir quelques problèmes de connexion. J'ai failli laisser tomber ce projet car je n'ai pas réussi à trouver la solution. Mais, quand je l'ai testé sur un vrai réseau local, j'ai eu la belle surprise de voir que tout fonctionnait merveilleusement bien. Puisque le but final est atteint, je n'ai pas cherché à comprendre pourquoi ça ne marchait pas aussi bien avec une seule adresse IP.
A++
mercredi 7 juillet 2004 à 22:18:48 | Re : les sockets seulement en réseau ?

Gabi

Merci pour vos réponses. Elles sont appréciées. Mais laissez moi spécifier ce que je voulais dire. C'est justement que tout marche quand je teste sur ma machine, et plus rien ne marche quand je pars dune autre machine. Je recoit une erreur 10061, cest a dire connection refused. Donc, c comme si mon server nexistait pas. Pourtant mon server ne me fait aucune erreur. Pouvez vous méclairer ?
mercredi 7 juillet 2004 à 22:29:28 | Re : les sockets seulement en réseau ?

Gabi

Au fait, si je fait le test je prend quelle adresse ip ? ou je la trouve ?
mercredi 7 juillet 2004 à 22:44:18 | Re : les sockets seulement en réseau ?

aardman

Membre Club
Salut,
Si tu teste avec un poste distant, il faut prendre l'ip internet du serveur. Pour trouver cette ip, la je peux pas vraiment t'aider, ca depend de la machine.
mercredi 7 juillet 2004 à 22:58:01 | Re : les sockets seulement en réseau ?

Gabi

ok mais c parce que quand jessai, même avec un autre programme que je nai pas programmé et qui est censé fonctionner, ca ne marche pas.
jeudi 8 juillet 2004 à 01:16:13 | Re : les sockets seulement en réseau ?

Gabi

Bon, pour vous simplifier la tâche au lieu de tourner en rond avec mes questions je vous propose mon code. Dites-moi ce qui cloche. Mon programme est compilé avec vc++. Et ne portez pas attenton aux commentaires, ils son utiles surtout pour moi :)

Server :



#include <iostream.h>
#include <winsock.h>
#include <string.h>
#include <stdio.h>

#define NETWORK_ERROR -1
#define NETWORK_OK 0

void ReportError(int errorCode, const char *wichFunc)
{
char errorMsg[92]="\0";

sprintf(errorMsg,"Call to %s returned error %d",(char *)wichFunc,errorCode);

cout << errorMsg;
}

int main()
{

WORD SockVersion = MAKEWORD(1,1);

WSADATA wsaData;

int nret;

WSAStartup(SockVersion,&wsaData);

SOCKET ListeningSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(ListeningSocket==INVALID_SOCKET)
{
nret=WSAGetLastError();
ReportError(nret,"socket()");

WSACleanup();
//return NETWORK_ERROR;

}

SOCKADDR_IN ServerInfo;

ServerInfo.sin_family=AF_INET;
ServerInfo.sin_addr.s_addr=INADDR_ANY;
ServerInfo.sin_port=htons(80);

nret=bind(ListeningSocket,(LPSOCKADDR)&ServerInfo, sizeof(struct sockaddr));

if(nret==SOCKET_ERROR)
{
nret=WSAGetLastError();
ReportError(nret,"bind()");

WSACleanup();
//return NETWORK_ERROR;
}

nret=listen(ListeningSocket, 10);

if(nret==SOCKET_ERROR)
{
nret=WSAGetLastError();
ReportError(nret,"listen()");

WSACleanup();
//return NETWORK_ERROR;
}

SOCKET Client;

Client=accept(ListeningSocket,NULL,NULL);

if(Client==INVALID_SOCKET)
{
nret=WSAGetLastError();
ReportError(nret,"accept()");

WSACleanup();
//return NETWORK_ERROR;
}

char Buffer[256]="\0";

strcpy(Buffer,"Allo\0");

while(1)
{
nret=send(Client,Buffer,strlen(Buffer),0);

if(nret==SOCKET_ERROR)
{
nret = WSAGetLastError();
ReportError(nret, "send()");

WSACleanup();
return NETWORK_ERROR;
}
}

cin >> Buffer;

closesocket(ListeningSocket);
closesocket(Client);

WSACleanup();
return NETWORK_OK;

}




Client :



#include <iostream.h>
#include <winsock.h>
#include <string.h>
#include <stdio.h>

#define NETWORK_ERROR -1
#define NETWORK_OK 0

void ReportError(int errorCode, const char *wichFunc)
{
char errorMsg[92]="\0";

sprintf(errorMsg,"Call to %s returned error %d",(char *)wichFunc,errorCode);

cout << errorMsg;
}

int main()
{

WORD SockVersion = MAKEWORD(1,1);

WSADATA wsaData;

int nret;

WSAStartup(SockVersion,&wsaData);

SOCKET ListeningSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(ListeningSocket==INVALID_SOCKET)
{
nret=WSAGetLastError();
ReportError(nret,"socket()");

WSACleanup();
//return NETWORK_ERROR;

}

SOCKADDR_IN ServerInfo;

ServerInfo.sin_family=AF_INET;
ServerInfo.sin_addr.s_addr=INADDR_ANY;
ServerInfo.sin_port=htons(80);

nret=bind(ListeningSocket,(LPSOCKADDR)&ServerInfo, sizeof(struct sockaddr));

if(nret==SOCKET_ERROR)
{
nret=WSAGetLastError();
ReportError(nret,"bind()");

WSACleanup();
//return NETWORK_ERROR;
}

nret=listen(ListeningSocket, 10);

if(nret==SOCKET_ERROR)
{
nret=WSAGetLastError();
ReportError(nret,"listen()");

WSACleanup();
//return NETWORK_ERROR;
}

SOCKET Client;

Client=accept(ListeningSocket,NULL,NULL);

if(Client==INVALID_SOCKET)
{
nret=WSAGetLastError();
ReportError(nret,"accept()");

WSACleanup();
//return NETWORK_ERROR;
}

char Buffer[256]="\0";

strcpy(Buffer,"Allo\0");

while(1)
{
nret=send(Client,Buffer,strlen(Buffer),0);

if(nret==SOCKET_ERROR)
{
nret = WSAGetLastError();
ReportError(nret, "send()");

WSACleanup();
return NETWORK_ERROR;
}
}

cin >> Buffer;

closesocket(ListeningSocket);
closesocket(Client);

WSACleanup();
return NETWORK_OK;

}



Merci beaucoup.
jeudi 8 juillet 2004 à 14:19:13 | Re : les sockets seulement en réseau ?

roswell117

Dans ta partie client, ce passage est plutôt étrange :

ServerInfo.sin_addr.s_addr=INADDR_ANY;


A cette endroit, tu dois définir l'adresse à laquelle le client doit se connecter. Tu dois donc spécifier une adresse IP valide.
Si tu travailles sur un seul ordi, tu peux utiliser "127.0.0.1", si tu es sur un autre ordi, tu dois y mettre l'adresse IP de l'ordi faisant tourner le serveur.
jeudi 8 juillet 2004 à 17:30:49 | Re : les sockets seulement en réseau ?

aardman

Membre Club
Salut,
En théorie INADDR_ANY sert a spécifier toutes les adresses que possede la machine (local, internet). Le code du serveur a l'air bon, mais je n'ai pas pu le tester (derriere un routeur).

1 2 3

Cette discussion est classée dans : réseau, seulement, sockets


Répondre à ce message

Sujets en rapport avec ce message

tutorial réseau c++ [ par paisibleman ] Bonjour ! Quelqu'un saurait il où je peux trouver un bon tutorial pour commencer la programation réseau en c++ ? Merci :) aide RAW sockets [ par alien9900 ] je veux une sur RAW Sockets;et merci; Est-ce seulement moi ou il y a des sources dont on se passerait volontier [ par MeltedMind ] Je me demande si je suis le seul débile à croire ça ou bien si il y a de nombreux sources qui laissent à désirer. Les calculatrices de XPand, Affiche Segmenter un fichier en mémoire C (seulement) [ par golum ] Voila pour ouvrir a partir de mon prog c un fichier de 20 Mo je met 1min et j'aimerais a tout pris diminuer ce temps.Est-il possible de segmenter le f Sockets !!!! [ par Xs ] salut !je cherche des tutoriaux sur internet pour savoir utiliser les sockets !en fait, c tou, juste une adresse pour des tuts sur les sockets (pour f Reutiliser les sockets [ par Thaeron ] Comment peut on faire pour utiliser une socket crée par un autre programme (comme le fait Winsock Packet Editor) ???? Récupérer Domaine/Workgroup des pc du réseau [ par jefy ] JefyJ'utilise Builder6 et je cherche le moyen de récupérer les Domaines ou Workgroups du réseau (accessoirement les pc qui en font partie).merci d'ava Aide Sockets Winsock [ par VoLc0m ] voila mon pb :en C bien sur :) je dois, par socket, envoyer ca a une address (server counter strike) :The packet should start with 4 consecutive bytes Executer un programme sur ordis en réseau [ par Sardinoman ] BonjourCela me parait assez improbable mais je voudrai tout de meme savoir s'il est possible d'éxecuter un programme en fichiers partagés sur tous les Aide pour les sockets [ par lukilou ] Quelqu'un peut il m'indiquer comment je peux creer un socket à vocation serveur. Je voudrais aussi definir son port et son nom pour ne pas utiliser d'


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,746 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales