这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【第四篇】明远智睿EK140 --tcp 服务器连接成功

共1条 1/1 1 跳转至

【第四篇】明远智睿EK140 --tcp 服务器连接成功

专家
2019-09-20 21:53:50     打赏

上上篇提到要做个tcp通道传送数据到服务器,刚完成调试。源码如下:

 

不知道附件插入成功没有。先列出代码

#include <stdio.h>  
#include <unistd.h>  
#include <string.h>  
#include <stdlib.h>  
#include <arpa/inet.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
int main(int argc,   char *argv[])  
{  
    unsigned short port = 6789;             // 服务器的端口号  
     char *server_ip = "119.29.206.29";       // 服务器ip地址  
      
    if( argc > 1 )       //函数传参,可以更改服务器的ip地址                                   
    {         
        server_ip = argv[1];  
    }     
    if( argc > 2 )      //函数传参,可以更改服务器的端口号                                     
    {  
        port = atoi(argv[2]);  
    }  
  
    int sockfd;  
    sockfd = socket(AF_INET, SOCK_STREAM, 0);// 创建通信端点:套接字  
    if(sockfd < 0)  
    {  
        perror("socket");  
        exit(-1);  
    }  
      
    // 设置服务器地址结构体  
    struct sockaddr_in server_addr;  
    bzero(&server_addr,sizeof(server_addr)); // 初始化服务器地址  
    server_addr.sin_family = AF_INET;   // IPv4  
    server_addr.sin_port = htons(port); // 端口  
    inet_pton(AF_INET, server_ip, &server_addr.sin_addr.s_addr);    // ip  
      
     // 主动连接服务器  
    int err_log = connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));       
    if(err_log != 0)  
    {  
        perror("connect");  
        close(sockfd);  
        exit(-1);  
    }  
      
    char send_buf[512] = {0};  
    printf("send data to %s:%d\n",server_ip,port);  
    while(1)  
    {  
        printf("send:");  
        fgets(send_buf,sizeof(send_buf),stdin); // 输入内容  
        send_buf[strlen(send_buf)-1]='\0';  
        send(sockfd, send_buf, strlen(send_buf), 0);   // 向服务器发送信息  
    }  
  
    close(sockfd);  
      
    return 0;  
}

交叉编译后传入板子:

root@myimx6ek140p:~# ls
hello  quectel-CM  tcp
root@myimx6ek140p:~# chmod 777 tcp
root@myimx6ek140p:~# ls
hello  quectel-CM  tcp
root@myimx6ek140p:~# ls -l
total 100
-rwxrwxrwx 1 root root 12084 Sep 10  2019 hello
-rwxrwxrwx 1 root root 71460 Sep  6  2019 quectel-CM
-rwxrwxrwx 1 root root 12604 Sep 20  2019 tcp
root@myimx6ek140p:~# ./tcp
send data to 119.29.206.29:6789
send:123

发送123后,在搭建的服务器上看到数据已经传输成功

122.jpg

这个时候,板子的ip为多少呢?,为10.56.56.37

root@myimx6ek140p:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 1c:87:76:52:60:17 
          inet addr:192.168.137.81  Bcast:192.168.137.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth2      Link encap:Ethernet  HWaddr f2:8f:a2:a1:a8:a2 
          inet addr:10.56.56.37  Bcast:10.56.56.39  Mask:255.255.255.252
          UP BROADCAST RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2036 (1.9 KiB)  TX bytes:6939 (6.7 KiB)

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:140 (140.0 B)  TX bytes:140 (140.0 B)

这主要是EK140通过EC20连接到了服务器,但是运营商分配的ip10.56.56.37通过路由转换

得到了113.129.160.113的公网ip。也就是必须终端主动连接服务器后才能进行服务器和终端的数据交互,。

在EK140上kill掉tcp进程后,服务器就失去了这个连接

123.jpg


预告:

下一篇完成数据的ad采集,并将数据发送到服务器。




关键词: 明远     智睿     tcp     服务器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]