Kwak a écrit:Comment ça ?
en fait je ne vois pas trop la syntaxe que je devrais avoir pour faire ça.
Ce qui se passe, c'est que je pense qu'il faut que je récupère la saisie via fgets. mais comment envoyer une commande pareille ? C'est ça que je ne comprends pas :hein:
Merci bien

Bonjour,
Si ça peut t'aider voilà un bout de code que j'ai écris il y aqq années pour faire un prog client serveur sur sockets:
void main(int argc, char *argv[])
{
struct sockaddr_in ServAddr;
struct sockaddr_in ClntAddr;
int BytesRcvd;
int FinBoucleProg;
int ClntLen;
char sCommand[RCVBUFSIZE];
unsigned short uiPort;
char servIP[20];
char suiPort[10];
int CodeErreur;
WSADATA wsaData;
HANDLE hThread;
DWORD dwThreadId;
//** Initialisation des variables depuis la base de registre
CodeErreur = LectureRegKey("Software\\PiloteDialogic","IPRouter",servIP);
CodeErreur = LectureRegKey("Software\\PiloteDialogic","Port",suiPort);
uiPort = atoi(suiPort);
//** Initialisation de la Dll Winsock 2.0
if (WSAStartup(MAKEWORD(2,0),&wsaData) != 0)
{
fprintf(stderr,"Erreur d'initialisation WSAStartUp");
exit(1);
}
//** Initialisation de la carte Dialogic et ouverture de toutes les voies de la carte
CodeErreur = InitDialogic ();
if (CodeErreur != 0)
{
DebugTrace("Erreur initialisation Dialogic");
printf("Erreur initialisation Dialogic \n");
}
//** Ouverture de la socket Serveur
if ((sock_serv = socket(AF_INET, SOCK_STREAM, 0)) < 0)
WinsockException("Erreur sur ouverture socket");
//** Nommage de la socket Serveur
memset(&ServAddr,0,sizeof(ServAddr));
ServAddr.sin_family = AF_INET;
ServAddr.sin_addr.s_addr = inet_addr(servIP);
ServAddr.sin_port = htons(uiPort);
//** Bind de la socket Serveur sur l'adresse locale
if (bind(sock_serv,(struct sockaddr *) &ServAddr, sizeof(ServAddr)) < 0)
WinsockException("Erreur sur bind socket");
//** Attente de connexion entrante sur la socket Serveur
if (listen(sock_serv,MAXPENDING) < 0)
WinsockException("Erreur sur listen socket");
printf("Connexion sur %s port %d\n",inet_ntoa(ServAddr.sin_addr),ServAddr.sin_port);
//** le programme se met en attente de la première connexion du multiplexeur ou de l'automate
//** lorsque la connexion est établie, il créé une socket de dialogue avec l'agent client
ClntLen = sizeof(ClntAddr);
if ((sock_client = accept(sock_serv,(struct sockaddr *) &ClntAddr,&ClntLen)) < 0)
WinsockException("Erreur sur accept");
//** puis on boucle sur cette socket jusqu'à réception de FIN
FinBoucleProg = VRAI;
while (FinBoucleProg)
{
//** Lecture des données reçues sur la socket
if ((BytesRcvd = recv(sock_client,sCommand,RCVBUFSIZE,0)) < 0)
WinsockException("Erreur de lecture");
//** Mise en forme de l'ordre reçu
sCommand[BytesRcvd] = '\0';
printf("recu : %s\n",sCommand);
//** Création d'un thread pour traiter la commande reçue
hThread = CreateThread(NULL, 0, DialogicProceed, sCommand, 0, &dwThreadId);
CloseHandle(hThread);
} // fin boucle principale du programme
//** Fermeture de la socket et fin du programme
closesocket(sock_client);
closesocket(sock_serv);
WSACleanup;
DebugTrace("Fin du programme PiloteDialogic");
exit(0);
}