从服务向远程套接字发送数据的问题

时间:2017-06-18 08:01:01

标签: java c# android sockets

我正在使用NotificationListenerService,我希望在调用onNotificationPosted()时将数据发送到远程套接字。 但我有一个问题,即套接字已连接,但是当我使用BufferedWriter或任何其他输出类编写内容时,它永远不会将其发送到远程套接字,直到我关闭应用程序和android studio的服务。 这是我发送数据的代码:

            new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //     DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
                    //    outputStream.writeUTF(send_counter + " $title: " + title + " $mes: " + mes);
                    Log.d(TAG, "started sending info");
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    bw.write(send_counter + " $title: " + title + " $mes: " + mes);
                    bw.newLine();
                    bw.flush();
                //    bw.close();
                    //  outputStream.writeInt(icon.length);
                    //      outputStream.write(icon);
                    Log.d(TAG, "info sent");
                    //    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

只有在我使用android studio上的停止按钮完全停止应用程序后,服务器才会从客户端获取消息。 此代码适用于发送邮件,因为此代码可以从主应用程序中为我工作,但只有在后台服务使用它时才会出现问题。

这是我的服务器代码(c#):

            TcpClient client = server.AcceptTcpClient();
            NetworkStream nwStream = client.GetStream();

            PostToConsole("Phone has connected from: " + ((IPEndPoint)client.Client.RemoteEndPoint).Address + ":" + ((IPEndPoint)client.Client.RemoteEndPoint).Port);

            byte[] buffer = new byte[client.ReceiveBufferSize];
            int res = nwStream.Read(buffer, 0, client.ReceiveBufferSize);

            while (res > 0)
            {
                string data = Encoding.UTF8.GetString(buffer, 0, res);
                PostToConsole(data + ((IPEndPoint)client.Client.RemoteEndPoint).Address);

                buffer = new byte[client.ReceiveBufferSize];
                res = nwStream.Read(buffer, 0, client.ReceiveBufferSize);

            }
        }

1 个答案:

答案 0 :(得分:0)

尝试创建一个separete服务类并将数据发送到其中。不要忘记唤醒设备。

我的意思是,使用startService()代替new Thread...

new Thread...用于新的。