H3863如何实现开启AP热点的同时,开启TCP服务?

Viewed 2

一、TCP代码如下,wifi_connect()失败

#define CONFIG_WIFI_SSID "BearPi_Pico_H3863" //要连接的WiFi 热点账号
#define CONFIG_WIFI_PWD "123456789" //要连接的WiFi 热点密码
#define CONFIG_CLIENT_PORT 8888 //要连接的服务器端口
#define TCP_BACKLOG 10

//在sock_fd 进行监听,在 new_fd 接收新的链接
int sock_fd, new_fd;

char recvbuf[512];
char* buf = "Hello! I'm BearPi-HM_Nano TCP Server!";

int tcp_server_sample_task(void *param)
{
param = param;

//在sock_fd 进行监听,在 new_fd 接收新的链接
int sock_fd, new_fd;

//服务端地址信息
struct sockaddr_in server_sock;

//客户端地址信息
struct sockaddr_in client_sock;
int sin_size;

struct sockaddr_in* cli_addr;

//连接Wifi
wifi_connect(CONFIG_WIFI_SSID, CONFIG_WIFI_PWD);

//创建socket
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    printf("socket is error\r\n");
    return 0;
}

bzero(&server_sock, sizeof(server_sock));
server_sock.sin_family = AF_INET;
server_sock.sin_addr.s_addr = htonl(INADDR_ANY);
server_sock.sin_port = htons(CONFIG_CLIENT_PORT);

//调用bind函数绑定socket和地址
if (bind(sock_fd, (struct sockaddr*)&server_sock, sizeof(struct sockaddr)) == -1) {
    printf("bind is error\r\n");
    return 0;
}

//调用listen函数监听(指定port监听)
if (listen(sock_fd, TCP_BACKLOG) == -1) {
    printf("listen is error\r\n");
    return 0;
}

printf("start accept\n");

//调用accept函数从队列中
while (1) {
    sin_size = sizeof(struct sockaddr_in);

    if ((new_fd = accept(sock_fd, (struct sockaddr*)&client_sock, (socklen_t*)&sin_size)) == -1) {
        printf("accept");
        continue;
    }

    cli_addr = malloc(sizeof(struct sockaddr));

    printf("accept addr\r\n");

    if (cli_addr != NULL) {
        memcpy(cli_addr, &client_sock, sizeof(struct sockaddr));
    }

    //处理目标
    ssize_t ret;

    while (1) {
        if ((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1) {
            printf("recv error \r\n");
        }
        printf("recv :%s\r\n", recvbuf);
        sleep(2);
        if ((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1) {
            printf("send : ");
        }

        sleep(2);
    }

    close(new_fd);
}

}

static void TCPServerDemo(void)
{
osThreadAttr_t attr;

attr.name = "TCPServerTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 10240;
attr.priority = osPriorityNormal;

if (osThreadNew((osThreadFunc_t)tcp_server_sample_task, NULL, &attr) == NULL) {
    printf("[TCPServerDemo] Failed to create TCPServerTask!\n");
}
printf("[TCPServerDemo] Success to create TCPServerTask!\n");

}

app_run(TCPServerDemo);

二、报错如下

hmac_single_hal_device_scan_complete:vap[2] time[879] chan_cnt[13] chan_0[11] back[1] event[6] mode[1]
Scan::vap[2] find bss_num[64] in regdomain, other bss_num[0]
Srv:548:receive event = 1
APP|[WIFI_STA_SAMPLE]::Scan done!.
Srv:1724:sta_scan_results cnt 64
APP|[WIFI_STA_SAMPLE]::Do not find AP, try again !
APP|[WIFI_STA_SAMPLE]::Scan start!
drv_soc_ioctl ioctl_cmd->cmd=14.

0 Answers