画像ストリームを表示する小さなアプリケーションを作成するために、c++ を学習しています。画像は、ファイルとして保存されていないj2meデバイスからのものです(したがって、バイトだけがあります)。
最初に画像のサイズを int として送信する必要があると考えているので、クライアントはストリーム内のその特定の画像をどれだけ読み取るかがわかります。
私の問題は、サイズが常に大きすぎることです-最初にサイズを読み込もうとしたときの画像のサイズではありません(この長さをjavaサーバーでsocket.write(int)で送信し、dataoutputstream.writeIntを試しました)。おそらくかなり単純なので、いくつかのコードを投稿します。
送ったものとサイズが違うのはなぜですか?
ssize_t
readLine(int fd, char *buffer, size_t n)
{
ssize_t numRead, tt; /* # of bytes fetched by last read() */
size_t totRead; /* Total bytes read so far */
char *buf;
char ch;
if (n <= 0 || buffer == NULL) {
return -1;
}
buf = buffer; /* No pointer arithmetic on "void *" */
totRead = 0;
for (;;) {
numRead = read(fd, &ch, 1);
tt += numRead;
if (numRead == -1) {
return -1; /* Some other error */
} else if (numRead == 0) { /* EOF */
if (totRead == 0) /* No bytes read; return 0 */
return 0;
else /* Some bytes read; add '\0' */
break;
} else { /* 'numRead' must be 1 if we get here */
if (totRead < n - 1) { /* Discard > (n - 1) bytes */
totRead++;
*buf++ = ch;
}
if (ch == '\n')
break;
}
}
printf("read line %s ", buf);
fflush(stdout);
int test = (int)buf;
printf("read line int %i ", tt);
fflush(stdout);
*buf = '\0';
return totRead;
}