私はそれがバイトオーダーであるかもしれないと思ったが、それはそれのようには見えない。 私は他に何ができるか分かりません。プリントアウトするのlinux ソケットを介してJavaクライアントからCサーバにintを書き込む
int sd = createSocket();
int code = -1;
int bytesRead = 0;
int result;
while (bytesRead < sizeof(int))
{
result = read(sd, &code + bytesRead, sizeof(int) - bytesRead);
bytesRead += result;
}
int ntolCode = ntohl(code); //test for byte order issue
printf("\n%i\n%i\n%i\n", code, ntolCode, bytesRead);
上
private static final int CODE = 0;
Socket socket = new Socket("10.10.10.10", 50505);
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
output.writeInt(CODE);
CサーバもLinux上
Javaクライアント:
-256
16777215
4
しようとして他に何わかりません。
ソリューション
このソリューションは、私にとっては、少なくともではない直感的ですが、とにかくダウン票に感謝します!
Java側
Socket socket = new Socket("10.10.10.10", 50505);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
int x = 123456;
ByteBuffer buff = ByteBuffer.allocate(4);
byte[] b = buff.order(ByteOrder.LITTLE_ENDIAN).putInt(x).array();
out.write(b);
C側
int sd = createSocket();
char buff[4];
int bytesRead = 0;
int result;
while (bytesRead < 4){
result = read(sd, buff + bytesRead, sizeof(buff) - bytesRead);
if (result < 1) {
return -1;
}
bytesRead += result;
}
int answer = (buff[3] << 24 | buff[2] << 16 | buff[1] << 8 | buff[0]);
誰もが何かを持っている場合、私はそれが可能である場合、好ましくは、BufferedWriterのを使用して、まだ簡単なソリューションに興味があります。
同じ出力を試しました。 – Nicolas
あなたのコードは、 'read()'によって返される 'result = -1'をチェックしません。 –
さて、私はこの質問のために何らかのエラーチェックを残しておくことにしました。 – Nicolas