ファイル転送をするプログラムを書いたのですがうまくいきません.
しようとしまして最初にheaderを送信し, server 側はファイル名のペイロードの長さを知りbufを用意します
次にファイルの中身の長さをserver は送り還し, clientはbufを用意します
その後serverからファイルを送信します
送受信の部分は以下になります
ファイル名すらそうしんできません
C
1//header 2struct msgh { 3 uint8_t type; 4 uint8_t status; 5 uint8_t flags; 6 uint8_t reserved; 7 uint32_t payload_length; 8}; 9struct content_req { 10 struct msgh msgh; 11 char* content_name; 12}; 13struct content_rply { 14 struct msgh msgh; 15 char* payload; 16}; 17
C
1//client 2 struct content_req req; 3 struct content_rply rply; 4 ssize_t len; 5 6 req.content_name = "./index.html"; 7 req.msgh.payload_length = strlen(req.content_name); 8 9 fprintf(stdout,"req.msgh.payload_length = %d\n",req.msgh.payload_length); 10 fprintf(stdout,"mojiretu:%s\n",req.content_name); 11 fprintf(stderr,"SIZE:%lu\n",sizeof(req)); 12 13 /* 送信 */ 14 if ((len = send(soc, &req, sizeof(struct content_req), 0)) == -1) { 15 /* エラー */ 16 perror("send"); 17 } 18 19 /* 受信 */ 20 if ((len = recv(soc, &rply.msgh, sizeof(struct msgh), 0)) == -1) { 21 /* エラー */ 22 perror("recv"); 23 } 24 25 rply.payload = (char *)malloc(sizeof(char) * rply.msgh.payload_length); 26 27 if ((len = recv(soc, rply.payload, sizeof(char) * rply.msgh.payload_length, 0)) == -1) { 28 /* エラー */ 29 perror("recv"); 30 } 31 32 fprintf(stdout,"%s\n",rply.payload);
C
1//server 2for(;;) { 3 4 if((len = recv(acc, &req.msgh, sizeof(struct msgh), 0)) == -1) { 5 perror("recv"); 6 } 7 8 req.content_name = (char *)malloc(sizeof(char) * req.msgh.payload_length); 9 fprintf(stdout,"req.msgh.payload_lenght = %d\n",req.msgh.payload_length); 10 11 if((len = recv(acc, req.content_name, sizeof(char) * req.msgh.payload_length, 0)) == -1) { 12 perror("recv"); 13 } 14 15 printf("mojisuu:%lu, moji:%s\n",strlen(req.content_name),req.content_name); 16 17/* 18 FILE* fp; 19 if ((fp = fopen(req.content_name, "r")) == NULL) { 20 perror("file open"); 21 exit(EXIT_FAILURE); 22 } 23 24 while((*(rply.payload + i) = fgetc(fp)) != EOF){ 25 i++; 26 } 27 28 *(rply.payload + i) = '\0'; 29 fclose(fp); 30*/ 31 rply.payload = "AAAAA"; 32 rply.msgh.payload_length = strlen(rply.payload); 33 if((len = send(acc, &rply, sizeof(struct content_rply), 0)) == -1) { 34 perror("send"); 35 break; 36 } 37 38 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。