2016-08-01 27 views
1

嗨每個人我正在開發一個聊天應用程序在android中,我已經開發了一個java服務器路由消息。系統工作的方式是,連接到服務器後,客戶端將其ID發送到服務器。現在我遇到的問題是有些時候服務器從客戶端收到ID,大部分時間服務器都沒有收到ID。請幫助我,我不知道爲什麼會表現這樣bufferwriter是不是與java服務器和Android客戶端

代碼服務器

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); 
} 

和客戶

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; 
    } 
} 

回答

1

嘗試關閉的BufferedReader後打印這樣

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

不,它沒有工作 –

+0

你確定你的客戶端有時不會發送空值嗎?用服務器代碼 –

+0

檢查它是否沒有客戶端不發送空,客戶端什麼也沒有發送 –