2016-11-16 2 views
0

私は死んだ単純なチャットアプリケーションを作成でき、問題に直面しているのを見ていました...私のPCとクライアント私の電話では、クライアントが私のPCに接続して、私は自分のPCに行って、私が望むだけ多くのメッセージを書くことができ、彼らは私の電話(クライアント)に表示されますが、 1つのメッセージしか送信せず、それ以上のアイデアはありませんか?Android SDK、クライアントからサーバへの出力ストリームが機能しない

サーバー:

static OutputStream out; 
static InputStream in; 
String name = "Server"; 

public static void main(String args[]){ 
    System.out.println("Server On"); 

    //Server 
    new Thread(new Runnable(){ 
     @Override 
     public void run(){ 
      new Main().start(); 
     }}).start(); 
    //Scanner for text input 
    new Main().scrnn(); 
} 

public void scrnn(){ 
    Scanner lol = new Scanner(System.in); 
    if(lol.hasNext()){ 
     try { 
      out.write((name + ": " +lol.nextLine().toString()).getBytes()); 
      out.flush(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    scrnn(); 
} 

public void start(){ 
    try{ 
     ServerSocket sok = new ServerSocket(42069); 
     while(true){ 
      Socket sk = sok.accept(); 
      in = sk.getInputStream(); 
      out = sk.getOutputStream(); 
      byte[] buffer = new byte[1024]; 
      in.read(buffer); 
      String recievedData = new String(buffer); 
      System.out.println(recievedData); 
      out.write(recievedData.getBytes()); 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

とクライアント:(アンドロイドフォン)

OutputStream out; 
InputStream in; 
Socket sk; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    list = new Object[]{"Thanks for using Monsterchat"}; 

    Button button = (Button)findViewById(R.id.buttonSend); 
    listView = (ListView) findViewById(R.id.listView); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       sk = new Socket("10.0.0.9", 42069); 
       sk.setKeepAlive(true); 

       out = sk.getOutputStream(); 
       in = sk.getInputStream(); 

       //This will send fine but if you look at the button onclick it wont send that :(
       out.write((name + " Joined the group!").getBytes()); 

       //This is how i can send constant messages from the server though 
       listenForData(); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         out.write("succ".getBytes()); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 
     } 
    }); 
} 

    public void listenForData() throws Exception{ 
    byte[] buffer = new byte[1024]; 
    in.read(buffer); 
    final String recievedData = new String(buffer); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      //Update listView with new message 
      buildList(recievedData); 
     } 
    }); 
    //Repeat 
    listenForData(); 
} 

申し訳ありませんが、コードの多くはだ、とも何も間違って見えるlogcatで出力を取得していません

+0

デバッグを試みましたか? –

+0

はい、それはまったく正直で何もしませんでした、他のアイデアはありますか? –

+0

'out.write((name +"グループに参加! ")。getBytes());'が正常に実行されていますか? –

答えて

0
while(true){ 
     Socket sk = sok.accept(); 
     in = sk.getInputStream(); 
     out = sk.getOutputStream(); 
    Dr byte[] buffer = new byte[1024]; 
     in.read(buffer); 
     String recievedData = new String(buffer); 
     System.out.println(recievedData); 
     out.write(recievedData.getBytes()); 

ループが間違っています。受信した1つのメッセージの後、サーバーはskをドロップし、新しいクライアントを待機します。

お試しください。

 Socket sk = sok.accept(); 
     in = sk.getInputStream(); 
     out = sk.getOutputStream(); 
     byte[] buffer = new byte[1024]; 
    while(true){ 
     int nread = in.read(buffer); 
     String recievedData = new String(buffer, 0, nread); 
     System.out.println(recievedData); 
     out.write(recievedData.getBytes()); 
+0

あなたはそこにありました!前回のメッセージから奇妙な余分なテキストを修正するためにwhileループで毎回 'buffer'を実行しました。 –

関連する問題