【发布时间】: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