【问题标题】:Issue when connecting a socket application over a port forwarded over adb通过通过 adb 转发的端口连接套接字应用程序时出现问题
【发布时间】: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


    【解决方案1】:

    要让 python 服务器代码和 android 客户端相互通信,您应该使用 adb 反向而不是正向。 这是您应该使用的adb 命令

    adb reverse tcp:5100 tcp:5100
    

    【讨论】:

    • 我这样做了,至少现在我可以设置 python 服务器了。但是,我无法通过套接字连接设备。我已编辑问题以添加客户端代码。
    • nvm,它正在工作,需要在清单中添加一些权限。谢谢!
    【解决方案2】:
    1. 使用 USB 数据线将手机连接到 PC。
    2. 发出命令:adb usb
    3. 发出命令:adb tcpip 5100
    4. 发出命令:adb connect xxx.xxx.xxx.xxx

    【讨论】:

    • 我应该在那些 xxx.xxx 中放什么?
    • 您的手机 IP 地址和另外一个认为您的 PC 和手机必须连接在同一网络中
    • 我没有通过无线连接将手机连接到 PC。它只是通过 USB 连接
    • 你的手机和电脑在同一个网络吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2021-10-13
    • 1970-01-01
    • 2021-08-24
    • 2018-07-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多