我的应用程序正在向java套接字服务器发送数据,但它只显示从服务器接收的第一条消息而不是其他消息。
这是Android客户端的完整代码。
公共类MainActivity扩展了AppCompatActivity {
Socket client;
EditText writeMsg;
TextView displayMsg;
String userInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
writeMsg = (EditText) findViewById(R.id.editText1);
displayMsg = (TextView) findViewById(R.id.textView);
ReceiveMsg obj = new ReceiveMsg();
Thread tr = new Thread(obj);
tr.start();
}
// A button to send msg to server when clicked
public void sendBtn(View view){
userInput = writeMsg.getText().toString();
SendMessage object = new SendMessage();
object.execute();
}
private class SendMessage extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
client = new Socket("10.0.2.2", 4444);
PrintWriter output = new PrintWriter(client.getOutputStream(), true);
output.print(userInput);
output.flush();
output.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
class ReceiveMsg implements Runnable {
public void run() {
try {
client = new Socket("10.0.2.2", 4444);
BufferedReader in =
new BufferedReader(
new InputStreamReader(client.getInputStream()));
int i = 0;
while (i == 0) {
displayMsg.setText(in.readLine());
}
} catch (Exception e) {
}
}
}
}
我希望应用在文本视图中显示新收到的消息并覆盖现有消息。
答案 0 :(得分:0)
您创建了两个客户端套接字。一个用于发送,一个用于接收。
正常只有一个客户端套接字发送命令然后接收服务器的回复。
答案 1 :(得分:0)
像往常一样,你正在读行,但你不是在发送行。
使用println()
,而不是print()
。
当您获得IOException
或readLine()
返回null时,您还需要停止阅读。
为什么有两个客户端套接字是另一个谜。