我正在尝试制作的功能CreationFichier
应该为客户端发送到服务器的每条消息创建一个文本文档,以便这些消息被储存起来,并且可以一次性重复使用。线程函数mess
是用于使客户端/服务器套接字在它们之间进行通信的机制。现在我正在努力寻找一种方法让我的服务器套接字打开,直到连接的客户端发送他想要的所有消息,因为客户端应该在关闭它的套接字之前发送 5 条消息。
void CreationFichier(char * a){
// creating file pointer to work with files
FILE *fptr;
// opening file in writing mode
fptr = fopen("tp.txt", "w");
// exiting program
if (fptr == NULL) {
printf("Error!");
exit(1);
}
fprintf(fptr, "%s", a);
fclose(fptr);;
}
//this is the thread protocol
void * mess (void * arg){
int so=*((int *)arg);
char *mess="Bonjour";
send(so,mess,strlen(mess)*sizeof(char),0);
cha buff[100];
int recu=recv(so,buff,99*sizeof(char),0);
buff[recu]='\0';
printf("Recu : %s\n",buff);
if(strcmp(buff,"PUT")==0){
CreationFichier(buff);
}else if(strcmp(buff,"GET")==0){
}
free(arg);
close(so);
}
int main(int argc, char**argv) {
if(argc!=2){
printf("Erreur il faut fournir un numero de port");
return 0;
}
int p=atoi(argv[1]);
int sock=socket(PF_INET,SOCK_STREAM,0);
struct sockaddr_in adress_sock;
adress_sock.sin_family=AF_INET;
adress_sock.sin_port=htons(p);
adress_sock.sin_addr.s_addr=htonl(INADDR_ANY);
int r=bind(sock,(struct sockaddr*)&adress_sock,
sizeof(struct sockaddr_in));
if(r=0){
r=listen(sockk,0);
while(1){
struct sockaddr_in caller;
socklen_t size=sizeof(caller);
int *sock2=(int *)malloc(sizeof(int));
*sock2=accept(sock,(struct sockaaddr *)&caller,&size)
if(*sock2>0){
printf("Nouvelle connection");
pthread_t th;
int r2=pthread_create(&th,NULL,mess,sock2);
if(r2!=0){
printf("Probleme de creation de thread");
exit(0);
}
}
}
}else {
printf("Probleme de Bind !")
}
return 0;
}