我的任务是实现一个在两部手机之间发送字符串的应用程序。在提示用户输入服务器的IP后,客户端将打开与服务器的连接。为此,我使用EditText字段和按钮。建立连接后,我想要一个新的EditText字段和一个按钮显示,用户可以输入字符串,然后单击按钮将这些字符串发送到服务器。服务器将在屏幕上显示该消息。 我应该为每个EdiText&按钮创建不同的活动吗?那将是2项活动。在那种情况下,我怎么能传递一个套接字,第一个活动会打开以建立与第二个活动的连接? 是否可以在一项活动中完成此操作?考虑到每个活动有1个相关的布局我发现很难实现,我将不得不隐藏一些字段并根据程序所在的阶段显示其他字段。
由于
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
serverIp = (EditText) findViewById(R.id.server_ip);
connectPhones = (Button) findViewById(R.id.connect_phones);
connectPhones.setOnClickListener(connectListener);
}
private OnClickListener connectListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (!connected) {
serverIpAddress = serverIp.getText().toString();
if (!serverIpAddress.equals("")) {
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
}
}
};
public class ClientThread implements Runnable {
public void run() {
try {
Log.d("ClientActivity", serverIpAddress);
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "C: Connecting...");
Socket socket = new Socket(serverAddr, ServerActivity.SERVERPORT);
connected = true;
while (connected) {
try {
Log.d("ClientActivity", "C: Sending command.");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
// where you issue the commands
out.println("message");
Log.d("ClientActivity", "C: Sent.");
} catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
}
socket.close();
Log.d("ClientActivity", "C: Closed.");
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
}
}
}
答案 0 :(得分:0)
你知道套接字是双向连接,所以你不需要做两个读写活动,但我不确定的是:我不知道你的应用是否能够显示收到的消息,因为你不是允许在主线程上进行联网,而使用另一个线程则可能不会影响UI