我正在制作一个简单的echo服务器/客户端应用程序。服务器站点是一个Java应用程序,客户端站点是一个Android应用程序。Echo服务器/客户端Java和Android应用程序
客户端旨在显示用户通过Toast消息通过服务器站点发送的内容。但问题在于信息总是延迟。
发送消息后的第一时间,敬酒的消息我是“空”,第二次它表明我发送的第一次...
这让我很困惑的消息...谢谢你帮助我!
Client:
public class Client extends Activity implements View.OnClickListener {
EditText editText;
Button button;
String string2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
editText=(EditText)findViewById(R.id.editText);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.client, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View view) {
Thread thread = new Thread(){
@Override
public void run(){
try {
Socket socket = new Socket("192.168.1.65",1234);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
dos.writeUTF(editText.getText().toString());
dos.flush();
string2 = dis.readUTF().toString();
dos.close();
dis.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread.start();
Toast.makeText(this,""+string2,Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Message sent!", Toast.LENGTH_SHORT).show();
}
}
Server:
public class Server {
static Socket socket =null;
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run(){
System.out.println("Server is on ");
try {
ServerSocket serversocket = new ServerSocket(1234);
while(true){
socket = serversocket.accept();
DataInputStream dis = new DataInputStream(socket.getInputStream());
String string = dis.readUTF();
this.sendToClient(string);
System.out.println("Message: "+ string);
dis.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendToClient(String str) throws IOException {
OutputStream s = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos = new DataOutputStream(s);
dos.writeUTF(str);
}
};
thread.start();
}
}
我明白你的意思,但我也试图让onClick的线程睡眠1秒,通常应该发送字符串。但我仍然有同样的问题... – Kkr0319 2014-09-23 23:27:42