|
|
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++
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!
|