Bonjour à tous.

Comme vous pourrez le constater je suis nouveau. Je viens de découvrir ce forum qui m'a l'air vraiment sympa.

Et vient donc vous posez mon prob en espérant que vous pourrez m'aider.

Je dois réceptionner un fichier. Environnement Visual C++ 6.0. Protocol TCP/IP

Je vous affiche mon code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
}
Mon prob étant sur la réception de gros fichier genre un fichier de 2Go. C'est pour être sur que quelque soit la taille du fichier m'a réception marchera.

Si vous avez besoin de quelconque information je me tiens à votre disposition.

Un coup il me dis erreur du bind, ensuite il me ferme mon prob mais ne me créer pas le fichier. Et une fois de temps en temps il me créé mon fichier et écrit bien tout dedans.

Dans appli.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <conio.h>
#include <winsock2.h>
 
void Client(void);
void Fin(char *pMsg);
void Serveur(void);
void CreateFichier(void);
 
 
 
extern char buffer_recept[512];
extern char buffer_nom[11];
extern FILE *test_open;