Android TCP 套接字不接收数据

马哈茂德·萨梅

我正在使用 Android 应用程序通过 TCP 套接字与同一 LAN 上的 PC java 应用程序进行通信、发送和接收消息。下面是我在 android 中使用的 Asynctask 代码来发送消息并接收来自 PC 的回复:

public class Client extends AsyncTask<Void, Void, Void> {

Context context;
String dstAddress;
int dstPort;
String msg;

Client(Context context, String addr, int port, String msg) {
    this.context = context;
    dstAddress = addr;
    dstPort = port;
    this.msg = msg;
}

String reply = "";

@Override
protected Void doInBackground(Void... arg0) {

    Socket socket = null;

    try {
        socket = new Socket(dstAddress, dstPort);

        BufferedWriter dout = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream() ));
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //send request
        dout.write(msg);
        dout.flush();
        dout.close();

        //get response
        reply = br.readLine();
        br.close();

    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (socket != null) {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return null;
}

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    // DISPLAY REPLY CONTENT
    Handler handler =  new Handler(context.getMainLooper());
    handler.post( new Runnable(){
        public void run(){
            Toast.makeText(context, "Server reply: " + reply ,Toast.LENGTH_LONG).show();
        }
    });
}

}

  • 我正在 onPostExcecute 中以敬酒方式显示 PC 的回复。
  • Android 通过 BufferedWriter 发送消息,而 PC 上的 java 应用程序在 BufferedReader 中接收它。(工作正常,并经过测试)
  • PC 在收到消息后通过 BufferedWriter 向 android 发送响应,其中 android 在 BufferedReader 中接收回复,如下所示:br.readLine()。(这里是问题):根据 PC 的应用程序调试,回复已成功发送,没有任何 IOExceptions 或错误发生,但在 android 端,回复字符串为空,看起来什么也没收到。我真的不知道我做错了什么,希望有人能指出我所缺少的。

下面是处理客户端套接字的服务器线程,该线程基本上在 serversocket 接受套接字时运行:

static class clientThread extends Thread {

    Socket s = null;
    clientThread(Socket s) //constructor
    {
        this.s = s;
    }

    @Override
    public void run ()
    {
        try
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //receiving data into a buffered reader

            String dataIn = br.readLine(); // reading the buffered data into a string
                System.out.println("received: " + dataIn);

            //BufferedWriter dout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            //dout.write("OK");
            //dout.newLine();

            PrintWriter dout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())), true);
            if(dataIn.equals("Android client"))
            {
                dout.println("OK");
                dout.flush();
                System.out.println("OK sent");
            }


            dout.close();
            br.close();
            s.close();
        }
        catch (IOException e)
        { System.out.println("Error occured"); }

    }
}

所以总结程序,android发送消息“Android客户端”(服务器接收并在控制台上打印没有问题),现在回复,服务器发送“OK”也没有问题,但是android一方什么也没收到。另外,正如我之前提到的,如果我删除了 dout.close(); 在我发送消息后从android的异步任务中,服务器仅在程序终止时接收消息,我不明白为什么我必须关闭它才能成功发送消息。

用户207421

您正在阅读线路,但您没有发送线路。在客户端发送的消息中添加行终止符,或者使用BufferedWriter.newLine(); flush()不是关闭缓冲的写入器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP反复从TCP套接字接收数据

来自分类Dev

使用从TCP套接字[python]接收的数据

来自分类Dev

C ++,TCP套接字无法接收数据

来自分类Dev

Android套接字接收数据

来自分类Dev

Android TCP套接字错误

来自分类Dev

Android tcp套接字设置etimedout值

来自分类Dev

设置套接字接收TCP超时

来自分类Dev

TCP套接字发送/接收始终等待

来自分类Dev

Java TCP套接字未正确接收

来自分类Dev

TCP:套接字发送/接收顺序

来自分类Dev

Android Java套接字写入和接收byte []数据

来自分类Dev

TCP套接字是否以发送数据的相同方式接收数据?

来自分类Dev

TCP套接字是否以发送数据的相同方式接收数据?

来自分类Dev

通过Android上的TCP套接字进行音频流

来自分类Dev

TCP客户端在android服务中读写套接字

来自分类Dev

如何从Android的套接字的inputStream()获取TCP标头?

来自分类Dev

套接字未将 Android 连接到 pc tcp

来自分类Dev

TCP套接字服务器如何判断从客户端接收到的数据何时完成?

来自分类Dev

是否有可能稍微延迟接收数据(使用任何.NET TCP套接字协议)

来自分类Dev

通过ruby TCP套接字接收大量数据时出现问题

来自分类Dev

TCP阻止套接字-在不同数据包中接收少量字节的可能性

来自分类Dev

如何检查是否使用Python中的TCP套接字接收了所有数据

来自分类Dev

spring-集成TCP网关,从套接字连接和接收数据

来自分类Dev

TCP阻止套接字-在不同数据包中接收少量字节的可能性

来自分类Dev

如何检查是否使用Python中的TCP套接字接收了所有数据

来自分类Dev

如何使用C#套接字TCP连接调度发送/接收数据

来自分类Dev

spring-集成TCP网关,从套接字连接和接收数据

来自分类Dev

Java Tcp套接字发送额外的数据?

来自分类Dev

TCP套接字复用发送大数据

Related 相关文章

  1. 1

    PHP反复从TCP套接字接收数据

  2. 2

    使用从TCP套接字[python]接收的数据

  3. 3

    C ++,TCP套接字无法接收数据

  4. 4

    Android套接字接收数据

  5. 5

    Android TCP套接字错误

  6. 6

    Android tcp套接字设置etimedout值

  7. 7

    设置套接字接收TCP超时

  8. 8

    TCP套接字发送/接收始终等待

  9. 9

    Java TCP套接字未正确接收

  10. 10

    TCP:套接字发送/接收顺序

  11. 11

    Android Java套接字写入和接收byte []数据

  12. 12

    TCP套接字是否以发送数据的相同方式接收数据?

  13. 13

    TCP套接字是否以发送数据的相同方式接收数据?

  14. 14

    通过Android上的TCP套接字进行音频流

  15. 15

    TCP客户端在android服务中读写套接字

  16. 16

    如何从Android的套接字的inputStream()获取TCP标头?

  17. 17

    套接字未将 Android 连接到 pc tcp

  18. 18

    TCP套接字服务器如何判断从客户端接收到的数据何时完成?

  19. 19

    是否有可能稍微延迟接收数据(使用任何.NET TCP套接字协议)

  20. 20

    通过ruby TCP套接字接收大量数据时出现问题

  21. 21

    TCP阻止套接字-在不同数据包中接收少量字节的可能性

  22. 22

    如何检查是否使用Python中的TCP套接字接收了所有数据

  23. 23

    spring-集成TCP网关,从套接字连接和接收数据

  24. 24

    TCP阻止套接字-在不同数据包中接收少量字节的可能性

  25. 25

    如何检查是否使用Python中的TCP套接字接收了所有数据

  26. 26

    如何使用C#套接字TCP连接调度发送/接收数据

  27. 27

    spring-集成TCP网关,从套接字连接和接收数据

  28. 28

    Java Tcp套接字发送额外的数据?

  29. 29

    TCP套接字复用发送大数据

热门标签

归档