嵌入式技术论坛
直播中

青sky

9年用户 1323经验值
擅长:模拟技术
私信 关注
[问答]

通过TCP连上服务器但EC20发不出数据怎么办

通过TCP连上服务器了,能收到数据,但是发不出数据,发送AT+QISEND指令总是ERROR

1.jpg

回帖(6)

杨秀英

2022-8-29 11:43:44
你的测试代码是怎么写的?贴上来看一下
举报

青sky

2022-8-29 11:45:36
1.jpg
举报

杨秀英

2022-8-29 11:46:33
就是说 connectID 为 1,但是送的时候 connectID 却是 0,这个地方看起来有问题,应该保持一致的
2.jpg
举报

杨秀英

2022-8-29 11:46:40
另外你是用的 AT 组件进行测试的吗?如果是 AT 组件的话就不用像你现在编写的测试函数来实现收发了,只用使用 socket 进行编程就行了。
举报

杨秀英

2022-8-29 11:46:48
AT 组件直接使用 socket 编程就行
1.jpg
举报

杨秀英

2022-8-29 11:46:58
类似下面的示例,也可以找一些 socket 编程的资料,类似于 Socket网络编程之TCP编程 这种的

#include
#include "rtdevice.h"
#include "board.h"
#include
#include
void ec20_tcp_test_thread_entry(void *parameter)
{
    struct sockaddr_in server_addr;
    int sockfd = -1, ret;
    char send_data[] = "hello rtthreadrn";
    char recv_data[1024];
#define SERVER_HOST   "127.0.0.1"
#define SERVER_PORT   8080
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        LOG_E("Socket create failed.n");
        return;
    }
    /* 初始化预连接的服务端地址 */
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_PORT);
    server_addr.sin_addr.s_addr = inet_addr(SERVER_HOST);
    rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
    /* 连接到服务端 */
    if (connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr)) < 0)
    {
        LOG_E("socket connect failed!n");
        closesocket(sockfd);
        return;
    }
    else
    {
        LOG_I("socket connect success!n");
    }
    /* 发送数据到 socket 连接 */
    ret = send(sockfd, send_data, strlen(send_data), 0);
    if (ret <= 0)
    {
        LOG_E("send error,close the socket.n");
        return;
    }
    while (1)
    {
        ret = recv(sockfd, recv_data, sizeof(recv_data), 0);
        if (ret <= 0)
        {
            LOG_E("recv error.n");
        }
        else
        {
            rt_kprintf("recv data: %s", recv_data);
        }
        rt_thread_mdelay(100);
    }
    /* 关闭连接 */
    closesocket(sockfd);
    return;
}
/**
* @Brief  启动 EC20 TCP 测试线程
* @param  无
* @Return
*/
int ec20_tcp_test(void)
{
    /* 创建EC200X模组数据接收处理线程 */
    rt_thread_t thread = rt_thread_create("ec20_tcp_test_thread", ec20_tcp_test_thread_entry, RT_NULL, 4096, 10, 20);
    if (thread != RT_NULL)
    {
        rt_thread_startup(thread);  // 创建成功则启动线程
    }
    else
    {
        LOG_E("create ex20 tcp test thread failed");
        return (-RT_ERROR);
    }
    return RT_EOK;
}
MSH_CMD_EXPORT(ec20_tcp_test, ec20 tcp test);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分