1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#include "appli.h"
void Serveur(void)
{
SOCKET testsoc;
FILE *test_open;
struct sockaddr_in confser;
char * pbuffer_recept_inf_512;
int testco,test,port,test_recv,test_recv1,test_fputs,test_fclose,ok_recept_via_send,ok,i=0;
char buff[50]="coucou";
WORD wVersionRequested;
WSADATA wsaData;
memset(buffer_recept,0,sizeof(buffer_recept));
// puts("...vidage du buffer...");
puts("*******************************Serveur du GOBELIN*******************************");
puts("Saisir le numero de port :");
scanf("%d",&port);
wVersionRequested = MAKEWORD( 2, 2 );
test=WSAStartup (wVersionRequested,&wsaData);
if(test!=0) Fin("Erreur WSAStartup");
puts("...creation de socket...");
testsoc=socket(PF_INET,SOCK_STREAM,0);
if(testsoc==INVALID_SOCKET) Fin("Erreur socket");
puts("...configuration de socket...");
/*configuration de la socket*/
confser.sin_port=htons(port);
confser.sin_addr.s_addr=inet_addr("172.20.102.79");
confser.sin_family=AF_INET;
puts("...liaison de la voie de communication par ecoute...");
test=bind(testsoc,(struct sockaddr *)&confser,sizeof(confser));
if(test==SOCKET_ERROR) Fin("Erreur bind");
puts("...attente d'une demande de connexion..");
test=listen(testsoc,1);
if(test==SOCKET_ERROR) Fin("Erreur listen");
puts("...Mise en place d'une voie d'echange des donnees...");
testco=accept(testsoc,NULL,0);
if(testco==INVALID_SOCKET) Fin("Erreur accept");
/*La fonction recv()*/
test_recv1=recv(testco,buffer_nom,(sizeof(buffer_nom)),0);
if(test_recv1==SOCKET_ERROR)
{
printf("%d\n",WSAGetLastError());
Fin("erreur recv");
}
test_open=fopen(buffer_nom,"w");
if(test_open==NULL) puts("une erreur d'ouverture est survenu");
puts(buffer_recept);
for( ; ; )
{
//informe le client que je peux réceptionner
ok=1;
ok_recept_via_send=send(testco,ok,sizeof(ok),0);
//réceptionne le buffer
test_recv=recv(testco,buffer_recept,sizeof(buffer_recept),0);
//buffer rempli
//lancement des test
if (test_recv==SOCKET_ERROR)
{
printf("%d\n",WSAGetLastError());
Fin("erreur recv_trame");
}
//fin des tests
//informe le client que je suis en cours de traitement du buffer
ok=0;
ok_recept_via_send=send(testco,ok,sizeof(ok),0);
//écrit dans le fichier le buffer réceptionner
//test si buffer plein
if(buffer_recept[511]!=0)
{
test_fputs=fputs(buffer_recept,test_open);
puts("ecriture dans le fichier");
i=0;
}
//donc buffer pas complètement rempli
if(buffer_recept[511]==0)
{
//recherche de la taille du calloc qu'il faudra utilisé en fonction du positionnement de i
i=0;
do
{
i++;
}while(buffer_recept[i-1]!=0);
//calloc mieux que malloc car il initialise les octets à 0
pbuffer_recept_inf_512=calloc(i,sizeof (char));
if(pbuffer_recept_inf_512==NULL) Fin("Erreur Malloc");
test_fputs=fputs(pbuffer_recept_inf_512,test_open);
puts("ecriture dans le fichier");
free(pbuffer_recept_inf_512);
}
}
test_fclose=fclose(test_open);
puts("fermeture du fichier");
puts("...fermeture...");
test=closesocket(testsoc);
if(test==SOCKET_ERROR) Fin("Erreur close");
test=WSACleanup();
if(test==SOCKET_ERROR) Fin("Erreur WSACleanup");
puts("*********************************Fin du serveur*********************************");
getch();
} |
Partager