我是 android 编程新手,我需要帮助来构建应用程序。我希望两部手机相互连接,一部是客户端,另一部是服务器。我希望客户有 2 个阶段。首先,用户将输入服务器的 ip,然后单击按钮以建立连接。在第二个中,用户将输入一条消息并单击一个按钮将其发送到服务器。
下面显示的代码是将字符串“消息”发送到服务器,但正如我所说,我希望用户能够输入字符串。我不知道如何解决他的问题,我是否需要在下面显示的活动中建立连接后调用第二个活动?在那种情况下,我不知道如何将套接字传递给另一个活动,我只知道如何传递字符串。此外,我需要另一个按钮,因此需要一个新的 OnClickListener,我仍然需要将套接字传递给该函数。
如果不使用第二个活动,我不知道如何在建立连接后显示第二个输入字段(用户输入消息以发送到服务器的那个)。此活动的视图(layout.xml)已经关联到相同的,我不能只清除屏幕并动态创建一个新的 EditText 字段。
我希望我说清楚了。
提前致谢
@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 {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Socket socket = new Socket(serverAddr, ServerActivity.SERVERPORT);
connected = true;
while (connected) {
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
**out.println("messageToSend");**
} catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
}
socket.close();
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
}
}
}