Соединение через сокет Android Server с приложением pc c # - PullRequest
0 голосов
/ 23 января 2019

мое первое соединение через сокет tcp, когда Android-устройство (эмулятор) действует как клиент, а приложение ПК работает как сервер, работает нормально (если вы знаете, что на стороне клиента используется 10.0.2.2 в качестве адреса сервера).

Теперь мне нужна сторона Android в качестве сервера и приложение ПК в качестве клиента, и я вообще не получаю соединения.

Оба работают на одной машине (андроид в эмуляторе).

Сторона Android

ServerSocket serverSocket = new ServerSocket(9301);
Socket socket = serverSocket.accept();

ПК сторона

TcpClient  dataClient = new TcpClient();

dataClient.BeginConnect( "127.0.0.1", 9301, Do, MyData);
// 127.0.0.1 just for testing, later there will be the real ip adress of the device

В сеансе telnet для эмулятора (5554) я добавляю редир, как это

redir add tcp:9301:9301

Честно говоря, я абсолютно неуверен в редире.Кто-нибудь знает, что я делаю неправильно, я схожу с ума по этому поводу.

Для странного, с этим кодом клиент получает соединение с любым, сервер не получает соединение.

Спасибомного

1 Ответ

0 голосов
/ 30 января 2019

Просто один из первых выводов. Кажется, что эмулятор Android иногда получает несколько байт меньше, чем send. Например, я отправляю файл с ~ 30000 байтов, я просто получаю 29987. Иногда это нормально. Я сделал тест с клиентом PC / c #, и соединение работает отлично, без потерь. Когда я тестирую соединение с Android, почти 70% файловых передач повреждены, потому что до 15 байт отсутствуют. Когда я меняю сторону сервера на socket.SendFile, результат намного лучше, но также не является идеальным. Я обновляю свой протокол, чтобы клиент знал, сколько байтов должно поступить, и в случае ошибки получения я могу повторно отправить файл. Мне любопытно поведение с реальным устройством и WLAN.

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