VB.Net сокеты, взаимодействующие с Android Socket

#java #android #vb.net

#java #Android #vb.net

Вопрос:

Я пытаюсь установить связь между приложением для Android и VB.net приложение, использующее сокеты. Приложение VB подключается к сокету нормально, но проблема, с которой я сталкиваюсь, заключается в том, что VB.net приложение отправляет данные в подключенный Android-сокет только тогда, когда я вызываю stream.Утилизировать.

Ниже приведен мой код как для Android, так и VB.net

Android:

 class Thread1 implements Runnable {

    @Override
    public void run() {
        Socket socket;
        try {
            serverSocket = new ServerSocket(SERVER_PORT);

            try {
                socket = serverSocket.accept();
                input = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        txtviewIP.setText("Connected");
                    }
                });
                new Thread(new Thread2()).start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private class Thread2 implements Runnable {
        boolean bKeepRunning = true;

    @Override
    public void run() {
        while (bKeepRunning) {
            try {
                final String message = input.readLine();
                if (message != null) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            Log.d("Message", "Command Received: "   message);
                            if (message.equalsIgnoreCase("A")) {
                                DoSomething();
                                bKeepRunning = false;
                            }
                        }
                    });
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            serverSocket.close();

            Thread1 = new Thread(new Thread1());
            Thread1.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  

VB.Net:

 Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim ipAddress As String
Dim port As String = "9877"
Dim serverStream As NetworkStream
Dim bConnected As Boolean = False

Public Function Connect() As Boolean

    Try
        clientSocket.Connect(ipAddress, port)

        serverStream = clientSocket.GetStream()
        bConnected = True
    Catch ex As Exception
        bConnected = False

    Finally

    End Try

    Connect = bConnected

End Function

Public Sub SendToServer(text As String)
    'Dim serverStream As NetworkStream = clientSocket.GetStream()
    Dim outStream As Byte() = System.Text.Encoding.UTF8.GetBytes(text)
    serverStream.Write(outStream, 0, outStream.Length)
    serverStream.Flush()

    'till this point no data is sent.
    'as soon as I call dispose or close data is sent 
    serverStream.Close() OR serverStream.Dispose()
    
    'Have also tried below code but this also do not work and behaves in the same way as above
    Dim stream As StreamWriter = New StreamWriter(serverStream, System.Text.Encoding.UTF8)
    stream.AutoFlush = True
    stream.Write(text)
    stream.Flush()
    'Data is sent as soon as the below line is executed
    Stream.Close()
End Sub
  

Комментарии:

1. Неясно, что отправляет клиент. Пожалуйста, расскажите. Или лучше: покажите в своем коде.

2. 'Data is sent as soon as the below line is executed Не думайте так. Данные уже были отправлены. Но после закрытия клиентского сокета данные были получены на стороне сервера.

3. Клиент @blackapps может отправлять любую строку. И да, это проблема, заключающаяся в том, что данные не принимаются при их отправке. Я не хочу, чтобы сокет подключался и закрывался каждый раз, когда необходимо отправлять данные. Поэтому нужна помощь в этом отношении. То же самое отлично работает, когда я использую сокеты в java. Но мне нужно реализовать это в VB.net

4. Client can send any string. Я так считаю. Но если сервер не получает его, строка не была в порядке. Итак, во второй раз: покажите, какую именно строку вы отправляете. So need help in this regard. Действительно. Затем дайте точные ответы, если их спросят.

5. Ну, это не нормально, так как это не строка. Сервер пытается прочитать строку, поэтому вам нужно отправить строку. Строка — это строка, заканчивающаяся символом новой строки n . Вы можете изменить на «Play: Video1.mp4 n» или просто добавить символ новой строки при записи ().