【问题标题】:Reading data from a Socket in android从android中的Socket读取数据
【发布时间】:2013-12-24 08:04:14
【问题描述】:

我很生气试图从套接字读取数据。我尝试了所有一切,我认为我的代码应该可以工作,但没有。

我的意图是只在 onCreate 上运行以下方法。首先我创建一个线程来运行所有与网络相关的东西。然后,我创建了 scoket 对象并读取了套接字的输入流。此刻,在一个无限循环中,我使用 readLine 读取输入流,如 this answer 上所解释的那样。最后,我对来自套接字的数据做我想做的事情。

我不知道服务器会发送多少数据。它会在 json 中,但这并不重要。

这是我的代码

public void receiveMsgs(){      
    new Thread(new Runnable(){
        @Override
        public void run() {
            BufferedReader in = null;
            try {
                Log.d("NETWORK-RECEIVE", "Trying to connect to socket...");
                Socket socket;
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
                socket = new Socket(serverAddr, SERVERPORT);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                if(socket.isConnected()){
                    Log.d("NETWORK-RECEIVE", "The connection have been stablished");
                }
            } catch (IOException e) {
                e.printStackTrace();
                Log.d("NETWORK-RECEIVE", "Something goes wrong: IOException");
            }
            while(true){
                String msg = null;
                try {
                    StringBuilder total = new StringBuilder();
                    String line;
                    while ((line = in.readLine()) != null) {
                        total.append(line);
                    }                   
                    msg = total.toString();
                    Log.d("NETWORK-RECEIVE","Message readed!:"+msg);
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.d("NETWORK-RECEIVE", "Something goes wrong: IOException");
                }
                if(msg == null){
                    Log.d("NETWORK-RECEIVE", "Message is null");
                    break;
                }
                else{
                    //Do what I want
                    Log.d("NETWORK-RECEIVE", "something");
                }
            }           
        }
    }).start();
}

【问题讨论】:

  • 您是在模拟器还是设备上尝试...?如果您想从服务器获取数据,为什么不使用 httpclient ?
  • 两者,因为我们使用流使用我们自己的协议,我必须通过流发布内容
  • 好吧,你运行它会发生什么?您会生成哪些日志消息?您是否有任何依据相信甚至正在与服务器建立连接?
  • 不要猜测 - 在您的代码中添加一些逐步记录成功结果的步骤。并告诉我们实际观察到的行为是什么。你怎么知道它不起作用?
  • 那么什么不起作用?在调查问题或报告任何人需要帮助您的信息方面,您确实不是很积极主动。

标签: java android sockets io java-io


【解决方案1】:

看过 square 的 OKHttp 或 Retrofit 吗?

http://square.github.io/okhttp/#examples

&

http://square.github.io/retrofit/

似乎比套接字更容易。你真的需要插座吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    相关资源
    最近更新 更多