2016-05-01 8 views
0

このクライアントサーバプログラムは1回だけ実行され、アンドロイドはサーバに文字列を送信し、サーバはarduinoにそれを転送します。私が最初に送るときarduinoはそれを持っていますが、私は2番目の時間サーバーをそれを受け取るが、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

私は編集を見ることができませんなぜ私はplzにそれを送ることができますかわからないのですか? –

答えて

0

あなたは一度だけソケットからの読み取りです。 ClientHandlerはループ内ですべてのI/Oを実行する必要があります。いずれもacceptループで実行する必要はありません。

NB Connectionは、accept-loopクラスの名前が不適切です。あなたはデータメンバーとしてそれを必要としません。ソケットと入力ストリームと出力ストリームは、serverではなく、ClientHandlerのメンバーである必要があります。

+0

uは、両方のクライアントのストリームとソケットを自分のクラスに移動することを意味しますか? –

+0

それには「平均」はありません。私は、 'ClientHandler'は全てのI/Oを行うべきであり、ソケットとその入出力ストリームは' server'ではなく 'ClientHandler'のメンバでなければならないと言っています。あなたは私に自分自身を繰り返すように求めているだけです。 – EJP