【发布时间】:2021-10-08 09:49:58
【问题描述】:
我正在开发一个应用程序,它在 PC 上具有服务器,客户端作为通过 adb (USB) 连接的 android 设备。
我已通过以下方式设置端口转发:adb forward tcp:5100 tcp:5100
每当我试图通过它运行我的 python 服务器时,它都会显示:
server.bind(("127.0.0.1", 5100))
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
这是我的服务器代码:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
#server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(("127.0.0.1", 5100))
server.listen()
print("Waitng for client Sockets " + socket.gethostname())
conn, address = server.accept()
with conn:
print("Connected to framework", address)
while True:
recvdStr = conn.recv(1024)
if not recvdStr:
break
print("Received: " + recvdStr.decode())
客户端代码:
#include <jni.h>
#include <string>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_testframeworktest_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
int client = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(5100);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(client, (sockaddr*)&serverAddr, sizeof(sockaddr));
send(client, "sending test string", strlen("sending test string"), 0);
send(client, "", strlen(""), 0);
return env->NewStringUTF(hello.c_str());
}
启用端口转发后,netstat -an 显示我的端口处于这种状态:
TCP 127.0.0.1:5100 0.0.0.0:0 LISTENING
【问题讨论】:
标签: python android c++ sockets adb