Socket系列:同网络中,两个安卓设备用Socket通信
时间: 2023-12-07 14:48:27 浏览: 31
要实现两个安卓设备之间的Socket通信,可以采用以下步骤:
1. 在AndroidManifest.xml文件中声明网络权限:
```
<uses-permission android:name="android.permission.INTERNET" />
```
2. 在布局文件中添加一个EditText用于输入消息,一个Button用于发送消息,以及一个TextView用于显示接收到的消息。
3. 在Activity中定义Socket对象,并在UI线程中创建和连接Socket。连接成功后,可以启动一个新线程用于接收消息。
```
private Socket socket;
private BufferedReader in;
private PrintWriter out;
// 创建并连接Socket
private void connectToServer() {
new Thread(new Runnable() {
@Override
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVER_PORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "连接成功", Toast.LENGTH_SHORT).show();
}
});
// 启动接收消息的线程
new Thread(new ReceiveThread()).start();
} catch (final Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "连接失败:" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
// 发送消息
private void sendMessage(final String message) {
new Thread(new Runnable() {
@Override
public void run() {
try {
if (out != null) {
out.println(message);
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
// 接收消息的线程
class ReceiveThread implements Runnable {
@Override
public void run() {
try {
while (true) {
if (in != null) {
final String message = in.readLine();
if (message != null && !message.equals("")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// 显示接收到的消息
textView.append(message + "\n");
}
});
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
4. 在Button的点击事件中调用sendMessage()方法发送消息。
```
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = editText.getText().toString();
if (!message.equals("")) {
sendMessage(message);
editText.setText("");
}
}
});
```
这样就可以实现两个安卓设备之间的Socket通信了。需要注意的是,如果要在局域网内进行通信,需要知道对方设备的IP地址和端口号。