iMX257开发板连接internet的过程

目标是模仿一个Arduino项目:Ulink——基于微信的物联网平台 (http://www.arduino.cn/thread-7368-1-1.html)

但是我到开发板是iMX257,板上有网口,要借助这个网口连接路由器上网,就需要将Arduino+W5100平台的代码移植过来。


代码主要借鉴: Linux网络编程:基于TCP的程序开发回顾篇 (http://blog.chinaunix.net/uid-23069658-id-3273673.html)

同时也参考了:
(1) Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32 (http://blog.youkuaiyun.com/xukai871105/article/details/17101131)
(2) Yeelink平台查询开关量——套接字编程 Windows平台  (http://blog.youkuaiyun.com/xukai871105/article/details/17096319)

我的代码如下:

    //TCP示例客户端 tcpclt.c
    #include 
   
   
    
    
    #include 
    
    
     
     
    #include 
     
     
      
      
    #include 
      
      
       
       
    #include 
       
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               int main() { int skfd; char buf[1024] = {0}; struct sockaddr_in server_addr; struct hostent *host; int portnumber,nbytes; char sinaserver[] = "1.tangerlink2.sinaapp.com"; portnumber = 80; char send_data[] = "GET /downup.php?token=doubleq&data=11 HTTP/1.1\r\nHost: 1.tangerlink2.sinaapp.com\r\n\ User-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n"; if(NULL == (host=gethostbyname(sinaserver)))/*DNS解析*/ { perror("Gethostname error:"); exit(1); } /* 创建socket描述符 */ if(-1 == (skfd=socket(AF_INET,SOCK_STREAM,0))) { perror("Socket Error:"); exit(1); } /* 客户端填充需要连接的服务器的地址信息结构体 */ bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(portnumber); server_addr.sin_addr=*((struct in_addr *)host->h_addr); printf("My server IP Address %s\r\n" , inet_ntoa(server_addr.sin_addr)); /* 客户端调用connect主动发起连接请求 */ if(-1 == connect(skfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))) { perror("Connect Error:"); exit(1); } if(-1 == write(skfd,send_data,strlen(send_data))){ perror("Send error:"); } /*客户端只接收服务器发来的数据,然后就退出*/ if(-1 == read(skfd,buf,1024)){ perror("Recv Error:"); } printf("Date arrived:%s",buf); /* 拆除TCP连接 */ close(skfd); exit(0); } 
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   

执行 ./get ,然后遇到了问题:

1. Gethostname error: Resource temporarily unavailable
解决办法:在 /etc/resolv.conf 中添加:
nameserver 192.168.1.253
说明:这一句就是指定域名服务器的IP地址,即路由器地址。搜索/etc/resolv.conf查看更多。

2. Connect Error: Network is unreachable
#开发板<---网线--->路由器, 电脑<---wifi--->路由器
#按照以上的连接方法,电脑和开发板可以互相ping通

解决方法:执行以下命令设置了网关:
# route add default gw 192.168.1.253
# route
Kernel IP routing table                                                         
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface   
192.168.1.0     *                    255.255.255.0     U          0      0        0     eth0    
default             localhost          0.0.0.0              UG         0      0        0     eth0  

3. 再执行./get ,终于成功了,在云服务器端查看数据库中data的值,已经被改成了11。

下面是开发板的打印信息。

########################################

My server IP Address 123.125.23.171                                             
Date arrived:HTTP/1.1 200 OK                                                    
Server: nginx/1.4.4                                                             
Date: Tue, 10 Feb 2015 18:07:50 GMT                                             
Content-Type: text/html                                                         
Transfer-Encoding: chunked                                                      
Connection: close                                                               
X-Powered-By: PHP/5.3.29                                                        
Via: 10.67.15.22                                                                
Set-Cookie: saeut=123.114.46.43.1423591670482511; path=/; max-age=311040000     
                                                                                
3                                                                               
{1}                                                                             
0         

##########################




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值