01net    Web


Actuellement en ligne : 145 Utilisateurs dont 6 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Socket [Dev-c++]
Passionné(e) d'internet, de logiciels, de forums ? 01net recrute...
Auteur
Message
 
<     1       >
esselfe
  Je calcul donc je suis relativ
  :-)
      ?   @     Posté le 24/05/2006 01:47:12  
Voter pour ce message
Salut à tous!

Je me demande si le client ET le serveur peuvent envoyer de l'information via la fonction send()...

Je veux dire... avoir une console qui affiche les données reçues et les données à envoyer...

Serait-ce mieux de faire cette application Win32?

a++
:fume:


Juste au cas:

[CODE]
#include <winsock.h>
#include <conio.h>
#include <iostream>
#include <windows.h>
using namespace std;

char *data_rec;
int rec_size;
char *data_send;
int send_size;

void getMessageToSend(void){
cout <<"Entrez votre message(100 chars): " <<endl <<endl;
data_send =new char[100];
cin.getline(data_send, 100);
}

void startAsServer(void){
system("CLS");
cout <<"Démarrage en mode serveur..." <<endl;
Sleep(1000);

WSADATA WSAData;
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;

system("CLS");
cout <<"Initialisation du module de gestion..." <<endl;
Sleep(1000);
WSAStartup(MAKEWORD(2,0),&WSAData);

system("cls");
cout <<"Initialisation du socket..." <<endl;
Sleep(1000);
sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(57);
// 57eme portréservé aux application terminales privées

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
system("CLS");
cout <<"Écoute..." <<endl;
Sleep(500);
if(listen(sock, 2)==SOCKET_ERROR){
cout <<"Erreur de l'écoute:" <<WSAGetLastError() <<endl;
system("PAUSE");
}
int sinsize = sizeof(csin);
if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET){
system("CLS");
cout <<"Fratide::Serveur(send only)" <<endl <<endl;
getMessageToSend();
system("CLS");
send(csock,data_send,50,0);
cout <<"Données envoyé." <<endl;
Sleep(1000);
delete [] data_send;
}

closesocket(sock);
WSACleanup();
cout <<"Terminé";
system("PAUSE");
system("CLS");
}

void startAsClient(void){
system("CLS");
cout <<"Démarrage en mode client..." <<endl;
Sleep(1000);

char ip[20] ="127.0.0.1";
char buffer[1024];
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN sin;

system("CLS");
/*
cout <<"Entrez l'addresse ip: ";
cin >>ip;
*/
cout <<"Adresse par défaut: 127.0.0.1:50" <<endl;
Sleep(1000);

system("CLS");
cout <<"Initialisation du module de gestion..." <<endl;
Sleep(1000);
WSAStartup(MAKEWORD(2,0),&WSAData);

system("CLS");
cout <<"Initialisation du socket..." <<endl;
Sleep(1000);
sock = socket(AF_INET,SOCK_STREAM,0);

sin.sin_addr.s_addr = inet_addr(ip);
sin.sin_family = AF_INET;
sin.sin_port = htons(57);
// 57eme portréservé aux application terminales privées

system("CLS");
cout <<"Connection..." <<ip <<endl;
Sleep(500);
if(connect(sock,(SOCKADDR *)&sin,sizeof(sin))!=0);
system("CLS");
cout <<"Fratide::Client(rec only)" <<endl <<endl;
int i = recv(sock,buffer,sizeof(buffer),0);
if (i != false){
cout <<"Données entrantes: " <<endl <<endl;
cout << buffer << endl <<endl;
}
else{
cout <<"Erreur de connection..." <<endl;
system("PAUSE");
}

closesocket(sock);
WSACleanup();
cout <<"Terminé";
system("PAUSE");
system("CLS");
}

int menu(){
cout <<"1- Client(Recept)" <<endl;
cout <<"2- Serveur(Envoi)" <<endl;
int choice =getch();
if(choice=='1')return 1;
else if(choice=='2')return 2;
else return 0;
}

int main(){
while(true){
int launch =menu();
if(launch==1)
startAsClient();
if(launch==2)
startAsServer();
else{
cout <<"Réessayez...";
system("PAUSE");
system("CLS");
}
}
getch();
}
[/CODE]

-->Message édité par esselfe le 24/05/2006 03:08:56<--
-------
vive Linux!
esselfe
  Je calcul donc je suis relativ
  :-)
      ?   @     Posté le 26/05/2006 02:31:17  
Voter pour ce message
Hé ben après de longue longue recherche sur Google, la communication, que se soit avec le mode SOCK_STREAM ou SOCK_DGRAM, est bidirectionnelle.

SOCK_STREAM:
- send()
- recv()

SOCK_DGRAM:
- sendto()
- recvfrom()

pour plus de détails sur le sujet: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/wins(...)


a++
:fume:
-------
vive Linux!
supdams
  
   
      ?   @     Posté le 12/09/2006 15:33:56  
Voter pour ce message
Sleep(1000); ca fais beaucoup ca non ? :??:
esselfe
  Je calcul donc je suis relativ
  :-)
      ?   @     Posté le 15/09/2006 23:16:10  
Voter pour ce message
C'était pour avoir le temps de lire le message. :fume:
-------
vive Linux!
Pc_eXPert
  Yosh !
   
      ?   @     Posté le 15/09/2006 23:47:47  
Voter pour ce message
Le fork de la commande unix [:cupra:1]
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Socket [Dev-c++]

Aller à :

Page générée en : 0.084s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Jeu-concours
Gagnez une console Wii et des DVD du film Death Sentence. Jouez maintenant sur RMC.fr !
Jeux
Nouveauté : Venez vous amuser avec ce jeu de bowling, et affrontez les elfes.