繁体   English   中英

如何使用套接字从服务器发送和接收消息?

[英]How to use socket to send and receive message from server?

嗨,大家好,我有一个任务,我想将消息发送到服务器,然后得到回复。 我不断failed 1recvfrom failed: EBADF (Bad file descriptor)错误,我是这个套接字的新手。 希望有人可以帮助我。 这是我的异步任务:

 private class SendDataAsyncTask extends AsyncTask<Void,Void,Void>
    {
        private String reply = "";
        @Override
        protected Void doInBackground(Void... params)
        {
            try {
                Socket socket = new Socket("ip",portNumber);
                PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
                //printWriter.write("hello there");

                printWriter.println("hello there");
                bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                printWriter.flush();
                reply = bufferedReader.readLine();
                if(reply != null && !reply.equals(""))
                {
                    Log.d(SOCKET_TESTING_TAG,"my message is " + reply);
                }
                else
                {
                    Log.d(SOCKET_TESTING_TAG,"no message yet");
                }
                Log.d(SOCKET_TESTING_TAG,"break 3");
                printWriter.close();

            }
            catch (IOException e)
            {
                Log.d(SOCKET_TESTING_TAG,"failed " + e.getMessage());
                e.printStackTrace();
            }
            return null;
        }
        @Override
        public void onPostExecute(Void var)
        {
            tv_response.setText(reply);
        }
    }
  • 注意:当我将if语句放在printWriter.flush()之前以检查空的printWriter.flush()仍然会出现错误。
printWriter.close();

关闭套接字的输入或输出流会关闭另一个流和套接字。 删除这两个事件。

if(bufferedReader.readLine() != null)

这没有道理。 您要把该行扔掉,如果不为空,则读取下一行。 您需要将结果存储到变量中。

您可能需要使用printWriter.println()而不是printWriter.write() 可能对方也正在读取线路,并且您没有发送任何线路(没有线路终结器)。

如果reply == null则表示对等方已关闭连接。 还不是“没有消息”。 空字符串可能是协议错误,但不是“没有消息”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM