【发布时间】:2014-04-25 12:04:42
【问题描述】:
我之前发布了一个问题,您帮助我解决了我的项目并大大提高了我的项目,并且正在寻找最后一点帮助。
我的笔记本电脑上运行着一个 Java TCP 服务器,它只是不断地读取通过该 TCP 端口提供的行。我 100% 肯定该功能正在运行,我在没有 android 应用程序的情况下对其进行了测试。
我的问题在于这段代码的某个地方:
public class MainActivity extends Activity {
private String serverIpAddress = "10.30.13.110";
private int serverPort = 50505;
private boolean connected = false;
private char launchercontrolcode;
Button button1;
ImageButton button2, button3, button4, button5, button6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.armbutton);
button1.setOnClickListener(onClickListener);
button2 = (ImageButton)findViewById(R.id.firebutton);
button2.setOnClickListener(onClickListener);
button3 = (ImageButton)findViewById(R.id.upbutton);
button3.setOnClickListener(onClickListener);
button4 = (ImageButton)findViewById(R.id.downbutton);
button4.setOnClickListener(onClickListener);
button5 = (ImageButton)findViewById(R.id.leftbutton);
button5.setOnClickListener(onClickListener);
button6 = (ImageButton)findViewById(R.id.rightbutton);
button6.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(final View v) {
switch(v.getId()){
case R.id.armbutton:
if (!connected) {
launchercontrolcode = 'A';
Thread cThread = new Thread(new ClientThread());
cThread.start();
for(int i =0 ; i<10; i++);
}
break;
case R.id.firebutton:
if (!connected) {
launchercontrolcode = 'F';
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
break;
case R.id.upbutton:
if (!connected) {
launchercontrolcode = 'U';
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
break;
case R.id.downbutton:
if (!connected) {
launchercontrolcode = 'D';
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
break;
case R.id.leftbutton:
if (!connected) {
launchercontrolcode = 'L';
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
break;
case R.id.rightbutton:
if (!connected) {
launchercontrolcode = 'R';
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
break;
}
}
};
public class ClientThread implements Runnable {
public void run() {
try {
Socket socket = new Socket(serverIpAddress, serverPort);
connected = true;
Log.d("ClientActivity", "Client Connected");
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(launchercontrolcode);
Log.d("ClientActivity", "Cliend Sent Code");
out.flush();
out.close();
} catch (Exception e) {}
socket.close();
Log.d("ClientActivity", "Post-socket close");
} catch (Exception e) {
connected = false;
}
}
}
}
我的问题是,如果我按下第一个按钮,它会很好地发送到服务器;但是,当我按第二次(或 X)时间时,由于某种原因它不会发送到服务器。我相当有信心问题出在我的 switch 语句中,但不确定它到底是什么。
提前致谢:)
【问题讨论】:
-
当你再次按下第一个按钮时会发生什么?
-
还是什么都没有,只是第一次按下按钮有效,注册后什么都没有
标签: java android tcp tcpclient