Reputation: 13
Hi every one i am developing a chat application in android for that i have developed a sever in java to route messages. The system works in such a way that after connecting to server the clients send its id to server. Now the problem i am having is that some times the server receives the id from client and most of the time the server don't receive the id. Please help me i have no idea why is it behaving like this
the code for 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);
}
and the code for 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;
}
}
Upvotes: 1
Views: 47
Reputation: 135
Try closing the bufferedReader after the print like this
int idOfClient=br.read();
System.out.println(""+idOfClient);
br.close();
Upvotes: 1