Как отправить данные с клиента C # на сервер Java через сокет? - PullRequest
1 голос
/ 15 января 2010

У меня сокет сервер написан на Java, он всегда слушает на конкретном порту. Я написал клиент на Java, и он мог подключиться к серверу, но когда я создал клиент на C #, я не смог подключиться к серверу.

Я просто хочу отправить короткое значение, чтобы запустить сервер Java.

Я полагаю, что проблема связана с порядком байтов (little-endian, big-endian), и у меня есть несколько дней на исследование, но я не могу решить эту проблему.

Я публикую больше информации о моей проблеме

Я использую java.io. * и java.net. *. Мой код Java

out = new ObjectOutputStream (requestSocket.getOutputStream ());
out.flush ();
общедоступная статическая финальная короткая CLIENT = 0;
out.writeShort (КЛИЕНТ);
out.flush ();

и с c # я использую System.Net.Sockets. Мой код C # ниже:

Сокет сокет = новый сокет (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
...
короткий sClient = 0;
if (BitConverter.IsLittleEndian) sClient = IPAddress.HostToNetworkOrder (sClient);

NetworkStream ns = новый NetworkStream (сокет);
BinaryWriter bw = новый BinaryWriter (нс);
bw.Write (sClient);

Код Java может подключаться к серверу Java, но код C # не может :(. Ошибка вывода с сервера Java: «Исключение при получении потоков сокетов»

Любой может помочь мне с этой проблемой, заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 января 2010

Сервер - это сервер, поэтому вам нужно быть более конкретным. Может быть миллион причин, по которым они не общаются правильно. Можете ли вы пинговать машину, на которой включен сервис? Они работают на одной машине или могут быть проблемы с брандмауэром? Вы отлаживаете каждый, чтобы увидеть, истекает ли запрос или активно отказывается? Они соединяются, но кодировка неверна?

Кроме того, какие протоколы вы используете? Если вы отправляете двоичные данные в произвольном формате протокола, может возникнуть проблема с порядком байтов, но большинство протоколов ожидают сетевой порядок байтов. Если есть проблема с порядком байтов, это то, что вам нужно проверить в отладчике. Какие calsses вы используете в Java и .NET? Можете ли вы опубликовать пример кода?

Для решения этой проблемы необходима дополнительная информация.

1 голос
/ 15 января 2010

Если у вас проблема с порядком байтов, вы должны взглянуть на следующие две ссылки, которые показывают, как конвертировать между порядком байтов хоста и сети

Заказ от сети к хосту

Заказ хоста в сети

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...