Ethernet
EthInterface 类层次结构
EthInterface 提供了一个 C++ API,用于通过以太网连接到互联网。默认情况下,此类不需要任何配置。它能够为目标选择默认的以太网驱动程序并选择正确的网络栈。
用法
要静态初始化驱动程序,请创建一个对象而不传递任何参数:
EthernetInterface eth;
然后,如果默认配置足够,请调出界面:
nsapi_error_t status = eth.connect();
现在,该接口已准备好用于网络套接字。
// Open a TCP socket
TCPSocket socket;
socket.open(ð);
// Open a UDP socket
UDPSocket socket;
socket.open(ð);
配置
对于 EthernetInterface,有两种可能的配置:
- 使用 DHCP 进行网络寻址。这是默认值。
- 使用静态配置的 IP 地址。
有关如何通过调用 set_network() 函数来设置 IP 地址,请参阅下面的 API。
故障排除信息
网络接口连接失败原因:
- NSAPI_ERROR_NO_CONNECTION 表示以太网链路出现故障。检查以太网连接是否正常。
- NSAPI_ERROR_DHCP_FAILURE 表示获取 IP 地址失败。检查 IP 地址配置服务是否正常。
EthInterface 类参考
公共成员函数 | |
virtual EthInterface * | ethInterface () |
公共成员函数继承自 NetworkInterface | |
virtual const char * | get_mac_address () |
virtual const char * | get_ip_address () |
virtual const char * | get_netmask () |
virtual const char * | get_gateway () |
virtual nsapi_error_t | set_network (const char *ip_address, const char *netmask, const char *gateway) |
virtual nsapi_error_t | set_dhcp (bool dhcp) |
virtual nsapi_error_t | connect ()=0 |
virtual nsapi_error_t | disconnect ()=0 |
virtual nsapi_error_t | gethostbyname (const char *host, SocketAddress *address, nsapi_version_t version=NSAPI_UNSPEC) |
virtual nsapi_value_or_error_t | gethostbyname_async (const char *host, hostbyname_cb_t callback, nsapi_version_t version=NSAPI_UNSPEC) |
virtual nsapi_error_t | gethostbyname_async_cancel (int id) |
virtual nsapi_error_t | add_dns_server (const SocketAddress &address) |
virtual void | attach (mbed::Callback< void(nsapi_event_t, intptr_t)> status_cb) |
virtual nsapi_connection_status_t | get_connection_status () const |
virtual nsapi_error_t | set_blocking (bool blocking) |
virtual WiFiInterface * | wifiInterface () |
virtual MeshInterface * | meshInterface () |
virtual CellularBase * | cellularBase () |
virtual EMACInterface * | emacInterface () |
静态公共成员函数 | |
static EthInterface * | get_default_instance () |
静态公共成员函数继承自 NetworkInterface | |
static NetworkInterface * | get_default_instance () |
静态保护的成员函数 | |
static EthInterface * | get_target_default_instance () |
静态保护的成员函数继承自 NetworkInterface | |
static NetworkInterface * | get_target_default_instance () |
其他继承成员 | |
继承自的公共类型 NetworkInterface | |
typedef mbed::Callback< void(nsapi_error_t result, SocketAddress *address)> | hostbyname_cb_t |
继承自的公共类型 DNS | |
typedef mbed::Callback< void(nsapi_error_t result, SocketAddress *address)> | hostbyname_cb_t |
受保护的成员函数继承自 NetworkInterface | |
virtual NetworkStack * | get_stack ()=0 |
EthInterface 示例
以下是 HTTP 客户端程序的示例。该程序将以太网作为底层网络接口,并使用它来通过 TCPSocket 执行 HTTP 事务:
#include "mbed.h"
#include "EthernetInterface.h"
// Network interface
EthernetInterface net;
// Socket demo
int main() {
// Bring up the ethernet interface
printf("Ethernet socket example\n");
net.connect();
// Show the network address
const char *ip = net.get_ip_address();
printf("IP address is: %s\n", ip ? ip : "No IP");
// Open a socket on the network interface, and create a TCP connection to mbed.org
TCPSocket socket;
socket.open(&net);
socket.connect("developer.mbed.org", 80);
// Send a simple http request
char sbuffer[] = "GET / HTTP/1.1\r\nHost: developer.mbed.org\r\n\r\n";
int scount = socket.send(sbuffer, sizeof sbuffer);
printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
// Recieve a simple http response and print out the response line
char rbuffer[64];
int rcount = socket.recv(rbuffer, sizeof rbuffer);
printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
// Close the socket to return its memory and bring down the network interface
socket.close();
// Bring down the ethernet interface
net.disconnect();
printf("Done\n");
}