Невозможно отправить данные из C # в программу Java (Android) - PullRequest
3 голосов
/ 18 февраля 2012

Я пытаюсь отправить данные из программы на C # .NET (приложение Windows) в программу Java (приложение Android) и наоборот, через TCP-соединение через Wi-Fi. До сих пор я успешно отправлял данные из Java в C #, но не смог сделать это из C # в Java.

Ниже приведен код Java, который я использовал для создания соединения и получения данных:

ServerSocket serverSocket = null;
DataInputStream socketInputStream;
while (true) {
        try {
            String localIPAddr = getLocalIPAddress();
            InetSocketAddress ipEndPoint = new InetSocketAddress(
                    InetAddress.getByName(localIPAddr), 8222);
            serverSocket = new ServerSocket();
            serverSocket.bind(ipEndPoint, 4);
            workerSocket = serverSocket.accept();

            socketInputStream = new DataInputStream(
                    workerSocket.getInputStream());
            inputText.setText(socketInputStream.readUTF());
        } catch (Exception ex) {
            throw ex;
        }
    }

Здесь getLocalIPAddress() метод возвращает IP-адрес устройства Android.

Ниже приведен код C # в приложении Windows для подключения к IP-адресу Android (192.168.1.6) и отправки на него данных:

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (!clientSocket.Connected)
                    clientSocket.Connect(IPAddress.Parse("192.168.1.6"), 8222);
                clientSocket.Send(Encoding.UTF8.GetBytes(txtInput.Text));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

Что ж, клиент (C #) не может подключиться к серверу (Java). Это означает, что данные не уходят от клиента. Но это будет, если он подключится. Пожалуйста, скажите мне, что мне не хватает и где я ошибаюсь. :)

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

После того, как вы запустили ваше приложение для Android и оно подключилось к Wi-Fi, вы пытались выполнить ping на ip, на котором запущено приложение.рабочей станции, на которой запущено приложение C #, попробуйте выполнить telnet на IP-адресе и порте ip-устройства android, чтобы проверить, работает ли оно.проблема в сети wifi.Как я уже неоднократно отмечал, брандмауэр маршрутизаторов отфильтровывает все порты, кроме 8080 и 80. Поэтому вам необходимо открыть порты на маршрутизаторе.

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

Ну, я решил это сам, но, конечно, Дилберт мне немного помог.Я благодарю его за то, что он предоставил.:)

Проверьте приведенный ниже код Java:

ServerSocket serverSocket = null;
Socket workerSocket;
DataInputStream socketInputStream;
try {
    if (serverSocket == null) {
        // No need to get local IP address and to bind InetSocketAddress.
        // Following single line make it very simple.
        serverSocket = new ServerSocket(8222, 4);
        workerSocket = serverSocket.accept();
    }
    // When data are accepted socketInputStream will be invoked.
    socketInputStream = new DataInputStream(
                workerSocket.getInputStream());

    /* Since data are accepted as byte, all of them will be collected in the
    following byte array which initialised with accepted data length. */
    byte[] rvdMsgByte = new byte[socketInputStream.available()];

    // Collecting data into byte array
    for (int i = 0; i < rvdMsgByte.length; i++)
        rvdMsgByte[i] = socketInputStream.readByte();

    // Converting collected data in byte array into String.
    String rvdMsgTxt = new String(rvdMsgByte);

    // Setting String to the text view.
    receivedMsg.setText(rvdMsgTxt);
} catch (Exception ex) {
    throw ex;
}

Обратите внимание, что для запуска этого кода в фоновом режиме требуется отдельный поток.

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

Вы пытались это сделать?

Runnable showmessage = new Runnable() { 
        public void run() { 
               myTextView.setText(membervariabletext); 
        } 
};

и из вашей ветки, после readUTF (), позвоните

runOnUiThread(showmessage);

Нашли это здесь

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