2016-08-01 2 views
1

Hallo, ich entwickle alle eine Chat-Anwendung in Android für die ich einen Server in Java entwickelt habe, um Nachrichten zu routen. Das System arbeitet so, dass die Clients nach der Verbindung zum Server ihre ID an den Server senden. Jetzt das Problem, das ich habe, ist, dass der Server manchmal die ID vom Klienten erhält und die meiste Zeit der Server die ID nicht empfängt. Bitte helfen Sie mir, ich habe keine Ahnung, warum es wie dieses Verhalten istBufferwriter arbeitet nicht mit Java-Server und Android-Client

den Code für Server

System.out.println("server starting at port: "+ portnumber); 
serverSocket = new ServerSocket(portnumber); 
while(true){ 
    System.out.println("waiting for client# "+ clientno); 

    //connecting to client's call 
    Socket socket = serverSocket.accept(); 
    System.out.println("Client# "+ clientno +" connected!!!"); 
    //recieving clients name 
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    int idOfClient = br.read(); 
    System.out.println("" + idOfClient); 
} 

und den Code für die Client-

public class MainActivity extends Activity { 
    private static final String TAG = "ChatActivity"; 

    private static final String hostname="192.168.0.100"; 
    private static final int portnumber=60123; 
    private ChatArrayAdapter chatArrayAdapter; 
    private ListView listView; 
    private EditText chatText; 
    private Button buttonSend; 
    private boolean side = false; 
    private BufferedWriter bw; 
    private BufferedReader br; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     buttonSend = (Button) findViewById(R.id.send); 

     listView = (ListView) findViewById(R.id.msgview); 

     chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), R.layout.right); 
     listView.setAdapter(chatArrayAdapter); 



     chatText = (EditText) findViewById(R.id.msg); 
     chatText.setOnKeyListener(new View.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
        try { 
         return sendChatMessage(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       return false; 
      } 
     }); 
     Thread thread=new Thread(){ 
      public void run() { 
       try { 
        chatArrayAdapter.add(new ChatMessage(!side, "Connecting to server")); 
        final Socket socket = new Socket(hostname, portnumber); 
        chatArrayAdapter.add(new ChatMessage(!side, "Connected to server")); 

        bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
        bw.write(2); 
        bw.newLine(); 
        bw.flush(); 

        br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        while(true) { 
         //if (br.ready()) { 
          //chatText.setText(br.readLine()); 
          chatArrayAdapter.add(new ChatMessage(!side, br.readLine())); 
         //} 
        } 
       } catch (Exception e) { 


       } 

      } 
     }; 
     thread.start(); 


     buttonSend.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       try{ 
       sendChatMessage(); 
       } 
       catch(Exception e){ 

       } 
      } 
     }); 

     listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
     listView.setAdapter(chatArrayAdapter); 

     //to scroll the list view to bottom on data change 
     chatArrayAdapter.registerDataSetObserver(new DataSetObserver() { 
      @Override 
      public void onChanged() { 
       super.onChanged(); 
       listView.setSelection(chatArrayAdapter.getCount() - 1); 
      } 
     }); 


    } 

    private boolean sendChatMessage() throws IOException { 
     String msg=chatText.getText().toString(); 
     try { 
      bw.write(msg); 
      bw.newLine(); 
      bw.flush(); 
      chatArrayAdapter.add(new ChatMessage(side, msg)); 
     } 
     catch(Exception e){ 
      chatArrayAdapter.add(new ChatMessage(side,"Message not sent")); 
     } 
     chatText.setText(""); 

     return true; 
    } 
} 

Antwort

1

die BufferedReader nach dem Druck Versuchen Sie, wie Schließen dieser

int idOfClient=br.read(); 
System.out.println(""+idOfClient); 
br.close(); 
+0

Nein, es hat nicht funktioniert –

+0

Sind Sie sicher, dass Ihr Client einige Male keine Nullwerte gesendet hat? Überprüfen Sie es mit einem wenn im Server-Code –

+0

kein Client sendet nicht null, der Client sendet nichts –

Verwandte Themen