帮我用android studio写一个app,我的需求是在主页面可以填入ip与端口,并且监听该端口下的消息
时间: 2024-02-21 12:02:28 浏览: 111
Android向指定端口发送数据,监听指定端口
好的,根据您的需求,我可以给您提供以下步骤:
1. 打开Android Studio,创建一个新的项目。
2. 在MainActivity中,添加一个EditText用于输入IP地址和端口号,添加一个Button用于连接服务器,并添加一个TextView用于显示服务器发送的消息。
3. 在Button的点击事件中,使用Socket连接服务器。可以使用AsyncTask或Thread来执行Socket连接操作。
4. 在连接成功后,开启一个线程监听服务器发送的消息。可以使用InputStreamReader和BufferedReader来读取服务器发送的消息。
5. 将读取到的消息显示在TextView上。
下面是一份示例代码,仅供参考:
MainActivity.java
```java
public class MainActivity extends AppCompatActivity {
private EditText mEtIP;
private EditText mEtPort;
private Button mBtnConnect;
private TextView mTvMessage;
private Socket mSocket;
private BufferedReader mReader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEtIP = findViewById(R.id.et_ip);
mEtPort = findViewById(R.id.et_port);
mBtnConnect = findViewById(R.id.btn_connect);
mTvMessage = findViewById(R.id.tv_message);
mBtnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
connectToServer();
}
});
}
private void connectToServer() {
final String ip = mEtIP.getText().toString();
final int port = Integer.parseInt(mEtPort.getText().toString());
AsyncTask.execute(new Runnable() {
@Override
public void run() {
try {
mSocket = new Socket(ip, port);
mReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
// 开启一个线程监听服务器发送的消息
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
final String message = mReader.readLine();
if (message != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTvMessage.setText(message);
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
```
activity_main.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/et_ip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:hint="IP地址"/>
<EditText
android:id="@+id/et_port"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et_ip"
android:layout_margin="16dp"
android:hint="端口号"/>
<Button
android:id="@+id/btn_connect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/et_port"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp"
android:text="连接"/>
<TextView
android:id="@+id/tv_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_connect"
android:layout_margin="16dp"/>
</RelativeLayout>
```
希望这能帮到您,如有问题请随时提出。
阅读全文