Я только что получил быстрый вопрос. Я пытаюсь создать приложение, которое может связываться с сервером, отправив пакеты TCP, а затем сервер отправит пакет TCP обратно или на другое устройство. Но как я могу сделать услугу, когда при получении пакета TCP на устройстве было сделано уведомление?android отправлять и получать TCP-пакет
Я пробовал это;
extends Service {
Thread henk;
private static final String TAG = "Service";
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
henk = new Thread(new Runnable(){
public void run() {
// TODO Auto-generated method stub
try {
Boolean end = false;
ServerSocket ss = new ServerSocket(1337);
while(!end){
//Server is waiting for client here, if needed
Socket s = ss.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String st = input.readLine();
Log.d("Tcp Example", "From client: "+st);
s.close();
}
ss.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
henk.run();
}
Но это просто разрушает мое приложение. Помогите, пожалуйста?
Stack Следы:
E/ActivityManager( 240): ANR in tictactoe.elqauto
E/ActivityManager( 240): Reason: Executing service tictactoe.elqauto/.servicere
cieve
E/ActivityManager( 240): Load: 7.09/7.29/7.5
E/ActivityManager( 240): CPU usage from 9411ms to 3791ms ago:
E/ActivityManager( 240): 1.2% 3857/de.devmil.minimaltext: 1.1% user + 0.1% ke
rnel/faults: 191 minor
E/ActivityManager( 240): 2.5% 240/system_server: 1.9% user + 0.5% kernel/fa
ults: 20 minor
E/ActivityManager( 240): 0.1% 4797/tiwlan_wq: 0% user + 0.1% kernel
E/ActivityManager( 240): 0% 16322/org.adwfreak.launcher: 0% user + 0% kernel
/faults: 226 minor 1 major
E/ActivityManager( 240): 0% 19108/com.aricent.mtp: 0% user + 0% kernel/faul
ts: 16 minor
E/ActivityManager( 240): 0% 30600/com.google.process.gapps: 0% user + 0% kern
el/faults: 20 minor 5 major
E/ActivityManager( 240): 11% TOTAL: 8% user + 3% kernel + 0.1% iowait
E/ActivityManager( 240): CPU usage from 368ms to 884ms later:
E/ActivityManager( 240): 5.6% 240/system_server: 1.8% user + 3.7% kernel/fa
ults: 15 minor
E/ActivityManager( 240): 5.6% 266/ActivityManager: 1.8% user + 3.7% kernel
E/ActivityManager( 240): 44% TOTAL: 1.9% user + 1.9% kernel + 40% iowait
Резюме:
Так что я пытаюсь сделать, это отправить пакет TCP с именем на сервер сервер получит IP-адрес, который принадлежит с это имя из базы данных и отправить ему пакет TCP с некоторой информацией. Поскольку я не нашел решение, я попробовал сокеты, но теперь я застрял в принимающей части.
Я сделал это –
Вы использовали logcat? Если это возможно, отправьте трассировку стека из логкатата при сбое приложения: 'adb logcat -s *: E' должен сделать это в командной строке. Я предполагаю, что есть попытка обновить пользовательский интерфейс, а не поток пользовательского интерфейса, но вывод о сбое будет точно. – jarvisteve
@jarvisteve Написал трассировку стека в '/data/anr/traces.txt' Но я не могу найти этот файл? –