Мое приложение Android должно отправлять данные на сервер через сокет, а также иногда получать данные с этого сервера. Для этого я использую сервис и. Отправка данных на сервер работает нормально, я использую метод службы, который я вызываю из активности. Но при отправке работ просто отлично, мое приложение не получает никаких данных. Пока я отправляю строку «pp», я должен вернуть еще один sring с сервера, но этого просто не произойдет. Что я делаю не так?Может отправлять, но не может получать данные через сокет в моем сервисе
Моя служба:
public class MyService extends Service {
private Socket socket;
public static PrintWriter out;
private BufferedReader in;
private String line;
private final IBinder binder = new MyBinder();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public class MyBinder extends Binder {
MyService getMyService() {
return MyService.this;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName("10.0.2.2");
socket = new Socket(serverAddr,8998);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Thread thread = new Thread(new Listener());
thread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return START_STICKY;
}
private class Listener implements Runnable{
@Override
public void run() {
while(true){
try {
line = in.readLine();
if(line!=null) Log.d(line,line); //never shows up in logcat
line=null;
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void send(String line){
out.println(line);
}
}
И мой сервер: общественный класс Сервер {
private static final int SERVER_PORT = 8998;
private static ServerSocket server = null;
private static Socket client = null;
private static BufferedReader in = null;
private static boolean isConnected = true;
private static String line;
public static void main(String[] args){
while(isConnected){
if(server==null || server.isClosed()){
try{
server = new ServerSocket(SERVER_PORT);
client = server.accept();
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Connected");
}catch (IOException e){
System.out.println("Error in opening Socket"+e);
System.exit(-1);
}
}
else{
try{
line = in.readLine();
if(line != null)
{
if(line.equals("pp")){
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),
true);
String toSend = "String to send";
out.write(toSend);
System.out.println("sent");
}
System.out.println(line);
}else if(in.read()==-1){
client.close();
server.close();
}
}catch (IOException e){
System.out.println("Read from client failed");
System.exit(-1);
}
}
}
}
}
спасибо. Это была такая глупая ошибка. Но почему вы говорите, что я должен закрыть розетку? Я хочу проверять данные с сервера все время – matip
Если 'readLine()' возвращает null, сверстник закрыл соединение. Больше данных нет. Больше данных больше не будет. Он будет продолжать возвращать null. Немедленно. Вы будете курить процессор, ни в коем случае. Закройте гнездо и остановите чтение. – EJP
Но когда я отправляю эту строку «pp» на сервер и получаю ответ, я могу сделать это снова. Это работает – matip