일반 텍스트를 보내면 문제가 없습니다. 모든 것은 괜찮습니다. 그러나 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);
내 수신 기능을 사용하면 sizeof(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
왜냐하면'strlen()'은 문자열을 의미하기 때문에 첫 번째 '\ 0'까지만 계산됩니다 –