我現在面臨一個問題,試圖通過套接字發送MP3文件在插座用C
這送的MP3文件的代碼,我用它來讀取MP3文件
FILE *file;
char *audio;
unsigned long fileLen;
file = fopen("AAAA.mp3", "rb");
if (!file)
{
fprintf(stderr, "Unable to open file");
return;
}
fseek(file, 0, SEEK_END);
fileLen = ftell(file);
fseek(file, 0, SEEK_SET);
audio = (char *)malloc(fileLen+1);
if (!audio)
{
fprintf(stderr, "Memory error!");
fclose(file);
return;
}
fread(audio, fileLen, 1, file);
fclose(file);
然後我有此功能,發送內容
int send_message(int sockfd, uint16_t code, char *message)
{
int bytes_sent;
uint16_t l_msg;
uint16_t l_msg_net;
char buffer[BUFFER_SIZE+CODE_LEN+MSG_LEN];
l_msg = strlen(message) + 1;
l_msg_net = htons(l_msg);
code = htons(code);
// Save message code
memcpy(buffer, &code, CODE_LEN);
// Save message length
memcpy(buffer + CODE_LEN, &l_msg_net, MSG_LEN);
// Save message
memcpy(buffer + CODE_LEN + MSG_LEN, message, l_msg);
bytes_sent = send(sockfd, buffer, (l_msg + CODE_LEN + MSG_LEN), 0);
return(bytes_sent);
}
如果我緩衝器(音頻從第一段代碼 VAR)保存到一個文件之前發送,它的偉大工程,但是當我嘗試將它保存在服務器端,它會被損壞。另外,緩衝區的內容是這個?? $?
我不知道爲什麼,我認爲這是因爲是一個二進制文件。
有什麼想法?也許我以錯誤的方式發送數據?
在此先感謝
好吧,它已經strlen的()中,因此它不能很好。所有使用strlen()調用的網絡/套接字代碼中有99%是borken。 –
@MartinJames假設二進制流爲100%。 –
我試過用sizeof(message)但是是一樣的東西... – Ernes