返回
安卓socket实例(一)实现简单的文件列表访问
Android
2024-01-05 10:36:16
安卓socket实例(一)实现简单的文件列表访问
前言
这个专题主要是讲述socket编程实现安卓端远程操控电脑,首先学习建立最基本的连接,在建立连接后,完成最基础的文件浏览,并将结果返回至安卓端。后面逐步的实现更高级的控制。
正文
1. 准备工作
环境:windows电脑、安卓手机、需要安卓手机与电脑处于同一wifi,安卓手机与电脑需要一个安卓socket编程客户端与服务器,服务器使用python语言,客户端使用java语言。
2. 服务端编程
(1)创建服务器端
import socket
# 创建socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口号
server.bind(('192.168.0.105', 50007))
# 监听端口,最大连接数为5
server.listen(5)
while True:
# 等待客户端的连接,直到有客户端连接,才会返回一个新的socket对象,该对象用来处理通信
client_socket, client_addr = server.accept()
# 接收客户端发来的数据
data = client_socket.recv(1024)
# 将数据转换成字符串,并打印出来
print(data.decode('utf-8'))
# 向客户端发送数据
client_socket.send(b'Hello, I am the server.')
# 关闭客户端的连接
client_socket.close()
3. 客户端编程
(1)创建客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class AndroidSocketClient {
public static void main(String[] args) {
try {
// 创建客户端socket对象,指定服务器IP和端口号
Socket socket = new Socket("192.168.0.105", 50007);
// 获取输入流,用来发送数据
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// 获取输出流,用来接收数据
BufferedReader output = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 不断地循环,发送数据,并接收服务器端发来的数据
while (true) {
// 从控制台读取一行数据,发送给服务器端
String line = input.readLine();
socket.getOutputStream().write(line.getBytes());
// 接收服务器端发来的数据
String response = output.readLine();
// 打印服务器端发来的数据
System.out.println(response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 实现文件列表访问
(1)服务器端
import socket
import os
# 创建socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口号
server.bind(('192.168.0.105', 50007))
# 监听端口,最大连接数为5
server.listen(5)
while True:
# 等待客户端的连接,直到有客户端连接,才会返回一个新的socket对象,该对象用来处理通信
client_socket, client_addr = server.accept()
# 接收客户端发来的数据
data = client_socket.recv(1024)
# 将数据转换成字符串,并打印出来
print(data.decode('utf-8'))
# 获取当前目录下的所有文件和文件夹
files = os.listdir('.')
# 将文件和文件夹列表转换成字符串
files_str = ','.join(files)
# 将文件和文件夹列表发送给客户端
client_socket.send(files_str.encode('utf-8'))
# 关闭客户端的连接
client_socket.close()
(2)客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class AndroidSocketClient {
public static void main(String[] args) {
try {
// 创建客户端socket对象,指定服务器IP和端口号
Socket socket = new Socket("192.168.0.105", 50007);
// 获取输入流,用来发送数据
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// 获取输出流,用来接收数据
BufferedReader output = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 不断地循环,发送数据,并接收服务器端发来的数据
while (true) {
// 从控制台读取一行数据,发送给服务器端
String line = input.readLine();
socket.getOutputStream().write(line.getBytes());
// 接收服务器端发来的数据
String response = output.readLine();
// 打印服务器端发来的数据
System.out.println(response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 效果展示
(1)运行服务端程序,控制台输出如下:
b'Hello, I am the client.'
(2)运行客户端程序,控制台输出如下:
Hello, I am the server.
(3)在客户端控制台输入“ls”,然后回车,控制台输出如下:
a.txt,b.txt,c.txt
(4)在客户端控制台输入“cd a.txt”,然后回车,控制台输出如下:
a.txt is not a directory