首页 > 解决方案 > VB.Net 套接字与 Android Socket 通信

问题描述

我正在尝试使用套接字在 android 应用程序和 VB.net 应用程序之间进行通信。VB 应用程序可以连接到套接字,但我面临的问题是 VB.net 应用程序仅在我调用 stream.Dispose 时将数据发送到连接的 android 套接字。

以下是我的 Android 和 VB.net 代码

安卓:

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

标签: javaandroidvb.net

解决方案


推荐阅读