如果我發送純文本,則沒有問題。一切都好。 但是,如果我嘗試從C#客戶端發送圖像,服務器會收到正確的字節數,但是當我將緩衝區保存到文件(以二進制模式 - wb)時,它總是有4個字節。將圖像從C#客戶端發送到C服務器
我通過使用函數File.ReadAllBytes()
由C#客戶端發送它。
我保存代碼看起來像
FILE * pFile;
char *buf = ReceiveMessage(s);
pFile = fopen (fileName , "wb");
fwrite(buf, sizeof(buf[0]), sizeof(buf)/sizeof(buf[0]), pFile);
fclose (pFile);
free(buf);
我接收功能看起來像
static unsigned char *ReceiveMessage(int s)
{
int prefix;
recv(s, &prefix, 4, 0);
int len = prefix;
char *buffer= (char*)malloc(len + 1);
int received = 0, totalReceived = 0;
buffer[len] = '\0';
while (totalReceived < len)
{
if (len - totalReceived > BUFFER_SIZE)
{
received = recv(s, buffer + totalReceived, BUFFER_SIZE, 0);
}
else
{
received = recv(s, buffer + totalReceived, len - totalReceived, 0);
}
totalReceived += received;
}
return buffer;
}
爲什麼我不能使用'strlen(buf)'而不是? – deem 2012-04-13 14:38:12
因爲'strlen()'是用於字符串的,只會計數到第一個''\ 0'' – 2012-04-13 14:39:12