2016-05-01 3 views
0

эта клиентская серверная программа запускается только один раз, строка отправки андроида на сервер и сервер отправляет ее в arduino. когда я отправляю первый раз, когда ардуино его получил, но когда я отправляю второй сервер, он его получает, но не отправляет его в arduino. Я не вижу проблемы. Я ценю, если кто-то может мне помочь ..Клиент/серверная программа не запускается обычным способом.

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
public class server { 

    private ServerSocket serverSocket; 
    String type1; 
    String type; 
    Socket socket; 
    Socket s; 
    DataOutputStream dos; 
    private ClientHandler c = new ClientHandler(); 
    private Connection con = new Connection(); 

    public server(int port) { 
     try { 
      serverSocket = new ServerSocket(port); 
      new Connection().start(); 
      // new ClientHandler().start(); 
     } catch (IOException e) {} 
    } 

    private class Connection extends Thread { 
     public void run() { 
      //Socket socket;  
      while (true) { 
       try { 
        socket = serverSocket.accept(); 
        // DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 
        System.out.println("connected"); 
        DataInputStream dis = new DataInputStream(socket.getInputStream()); 
        type = dis.readUTF(); 
        System.out.println("jag fick det från android: " + type); 

        new ClientHandler().start(); 
        dis.close(); 
        //c.run();  
       } catch (IOException e) {} 
      } 
     } 
    } 

    private class ClientHandler extends Thread { 
     public void run() { 
      //System.out.println("1"); 
      try { 
       // System.out.println("2"); 
       socket = serverSocket.accept(); 
       // System.out.println("3"); 
       System.out.println("got it"); 
       dos = new DataOutputStream(socket.getOutputStream()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      while (true) { 
       try { 

        if (type == null) { 
         //break; 
         continue; 
        } 
        // System.out.println("4"); 
        //DataInputStream dis1 = new  DataInputStream(s.getInputStream()); 
        //type1 = dis1.readUTF(); 
        //System.out.println("3"); 

        dos.writeUTF(type); 
        System.out.println("jag fick det från ardunio: " + type); 
        //dos.flush(); 
        //dos.close(); 
        // con.run(); 
        // type = null; 
        //socket.close(); 
        break; 
        //continue; 
       } catch (IOException e2) {} 
      } 
     } 
    } 

    public static void main(String[] args) { 
     new server(3389); 
     System.out.println(" Server startar"); 
    } 
} 
+3

Начните с того, что не проглотите исключения ... если что-то вызывает исключение, вы должны хотя бы знать, что исключение было поднято, попробуйте напечатать их, по крайней мере. – SJuan76

+1

Господи Иисусе, что отступы ... xD –

+0

Я не вижу редактирования, я не знаю, почему я могу отправить его мне плз? –

ответ

0

Вы только читаете из гнезда один раз. ClientHandler должен выполнять все операции ввода-вывода в своем цикле: ни один из них не должен выполняться в цикле принятия.

NB Connection - плохое имя для класса accept-loop. Вы не нуждаетесь в нем в качестве члена данных. Розетка и входные и выходные потоки должны быть членами ClientHandler, а не server.

+0

u означает, что я перемещаю потоки и сокеты для обоих клиентов в собственный класс? –

+0

В этом нет «среднего». Я * сказал *, что 'ClientHandler' должен выполнять все операции ввода-вывода и что сокет и его входные и выходные потоки должны быть членами' ClientHandler', а не 'server'. Ты просто просишь меня повторять. – EJP

Смежные вопросы