Я злюсь, пытаясь прочитать данные из сокета. Я пробовал все и все, я думаю, что мой код должен работать, но нет.Чтение данных из гнезда в android
Мое намерение заключается только в следующем методе onCreate. Сначала я создаю Thread для запуска всех вещей, связанных с сетью. Затем я создаю объект 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? – Piyush
Оба, потому что мы работаем с нашим собственным протоколом, используя потоки, и я должен отправлять сообщения через потоки. –
Ну, что происходит с тем, что вы запускаете? Какие сообщения журнала вы создаете? Есть ли у вас основания полагать, что соединение даже устанавливается с сервером? –