メッセージを交換するクライアント/サーバーがあり、サーバーが読み取るバイト数を知るために、送信している文字列のサイズを文字列の先頭に追加しようとしています。char* の +4 位置から始まるメッセージを追加し、memcpy を使用して文字列の strlen をコピーしました。それはうまくいかないようで、それを行う方法が間違っていると何かが教えてくれます。これは私のコードです。
//*CLIENT*//
send_message = malloc(1024 * sizeof(char));
strcpy(send_message + 4,"GETFILES ");
strcat(send_message,"/");
strcat(send_message,directory_name);
size = strlen(send_message) + 1;
csize = malloc(4 * sizeof(char));
csize = (char*)&size;
memcpy(&send_message,csize,4);
if((sent = send(sock, send_message, strlen(send_message) + 1, 0)) < 0)
perror("write");
//*SERVER*//
while(1){
count = recv(events[i].data.fd, buf, sizeof(buf),0);
if(count == -1){
//if errno = EAGAIN we have read all data. going back to main loop
if(errno != EAGAIN){
perror("read");
done = 1;
}
break;
}
else if(count == 0){
//End of file. The remote has closed the connections
done = 1;
break;
}
printf("received message %s and count %d\n", buf, count);
}
これらの行にコメントすると
csize = malloc(4 * sizeof(char));
csize = (char*)&size;
memcpy(send_message,csize,4);
私はこの出力を得ます:
received message ▒�w�GETFILES /test and count 19
そうしないと、出力が得られません..それを修正してヘッダーを追加して、サーバーが読み取るバイト数を事前に知る方法はありますか?