c - 有可用的 mbed 以太网接口(interface)库吗?

标签 c sockets ethernet mbed stm32f7

我正在做一个关于STM32F767ZI的项目。当我编译代码时出现的错误是“您的目标不支持以太网接口(interface)库”。我在google上研究了一下,找到了某人的F7_Ethernet库,但由于库内部的错误,程序仍然无法编译。

代码如下:

//Example - Voice Controlled Door Access 
#include "mbed.h" 
//#include "EthernetInterface.h" 
//#include "F7_Ethernet.h"
#include <stdio.h> 
#include <string> 
#include "rtos.h" 
#include "Servo.h"

#if defined(TARGET_NUCLEO_F767ZI)    
Servo myservo(D9);
#endif
#define PORT   80

void web_server(void const *args) {    
TCPSocketServer server;    
TCPSocketConnection client;         
server.bind(PORT);    
server.listen();
    while(true){        
    printf("Waiting for connection...\r\n");        
    int32_t status = server.accept(client);        
    printf("Connection from: %s\r\n", client.get_address());           
         if (status>=0)    
        {          
             char buffer[1024] = {};          
             int n= client.receive(buffer, 1023);          
             printf("Received Data:  %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);             
           //GET /q=open+sesame HTTP/1.1          
             char item[13];             
             for(int k=0; k<13; k++){         
                  item[k]= buffer[k+5];          
                  }
char Body[1024] = {};            
    if (strcmp(item,"q=open+sesame")==0){       
        sprintf(Body,"<html><title></title><body><h1>Door  Open</h1></body></html>\n\r\n\r");           
        //move the servo to open the door,              
        myservo = 1;             
        // wait for 5 seconds, close the door              
        wait(5);              
        //close the door              
        myservo = 0;        
         }          
    else{           
        sprintf(Body,"<html><title></title><body><h1>Door Not  Open</h1></body></html>\n\r\n\r");
            //do nothing with the door         
             }               
char Header[256] = {};      
sprintf(Header,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent- Type: text/html\n\rConnection: Keep-Alive\n\r\n\r",strlen(Body));          
client.send(Header,strlen(Header));          
client.send(Body,strlen(Body));
client.close();       
 }   
  } 
  } 
  int main() {   
   EthernetInterface eth;    
   eth.init();     
   eth.connect();    
   printf("\r\nServer IP Address is %s\r\n", eth.getIPAddress());     
     //close the door    
   myservo = 0;    
   //wait for instructions    
   web_server("");    
   while(1){}   
    }

最佳答案

我假设您使用的是最新的 Mbed 操作系统版本 (5.11~)。我建议使用 NetworkInterface (doc) 和 TCPSocket。

初始化网络接口(interface)后,使用TCPSocket打开连接connect()、发送数据send()并接收数据recv()。它也可以bind()accept()listen()

您可以在此处找到示例程序: https://os.mbed.com/docs/mbed-os/v5.14/apis/tcpsocket.html#server-socket

关于c - 有可用的 mbed 以太网接口(interface)库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137258/

相关文章:

python - 在我的脚本中获取 "TypeError: an integer is required"

原始以太网数据包中特定字节的 wireshark 显示过滤器

c - 关闭应用程序时是否需要终止线程?

c - union 和结构初始化

java - Java 中的 IP header

C# 接收 TCP/IP 多套接字服务器

c++ - Linux 链接器/加载器的环境覆盖

c - 在 Linux 中为 NTFS 执行 ls 命令

c++ - 在 Linux 上使用 C++ 进行 arping

ubuntu - 在 Ubuntu 18.04 上编译 Intel I219V 以太网卡