Java DataInputStream readInt () из C ++ Client получает огромное значение - PullRequest
0 голосов
/ 22 февраля 2012

Я подозреваю, что это связано с порядком байтов, но я не уверен, как это исправить.У меня есть клиент C ++, сообщающий серверу Java, сколько байтов он собирается отправить, когда сервер Java просто вызывает readInt () во входном потоке.Затем сервер переходит к чтению остальных данных.

В тот момент, когда сервер C ++ вызывает:

char l = '3';
BytesSent = send( Socket, &l, 1, 0 );

, тогда соответствующая сторона Java будет:

int lBytesSent = m_InDataStream.readInt();

m_AckNack = new byte[lBytesSent];
m_InDataStream.read(m_AckNack)

Bytes lBytesSent имеет тенденцию быть неким значительным значением, которое затем просто генерирует исключение, когда дело доходит до создания массива (неудивительно)

Сокет C ++ просто открывается:

Socket = socket(AF_INET, SOCK_STREAM, 0);
Option = 1000;
setsockopt(Socket, SOL_SOCKET, SO_RCVTIMEO, (char *) &Option, sizeof(Option));
server.sin_family = AF_INET;
server.sin_port = htons(Port);
server.sin_addr.s_addr = INADDR_ANY;
memset(&(server.sin_zero), '\0', 8);
connect(Socket, (sockaddr*)&server, sizeof(server));

И сторона Java:

ServerSocket listener = new ServerSocket(port);
Socket server;
server = listener.accept();

Устранение ошибок, проверяющих ясность.

Любые предложения будут великолепны

Большое спасибо

Оценка

1 Ответ

3 голосов
/ 22 февраля 2012

Попробуйте ввести число через htonl перед отправкой (на стороне C ++):

long x = htonl(42); /* x now contains 42 represented in network byte order */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...