Usare servizi di reteUse network services

Azure Sphere può usare un indirizzo IP statico, un server DHCP (Dynamic Host Configuration Protocol) e un server SNTP (Simple Network Time Protocol) per un'interfaccia di rete.Azure Sphere can run a static IP address, dynamic host configuration protocol (DHCP) server, and a simple network time protocol (SNTP) server for a network interface. Il server DHCP consente alle applicazioni Azure Sphere di configurare i parametri di rete per un dispositivo esterno sulla rete.The DHCP server enables Azure Sphere applications to configure network parameters for an external device on the network. Il dispositivo esterno può usare il server SNTP per sincronizzare la propria ora con Azure Sphere.The external device can use the SNTP server to synchronize its time with Azure Sphere.

Configurazione di reteNetwork configuration

È possibile configurare un'interfaccia di rete Ethernet e un'interfaccia di rete Wi-Fi per l'esecuzione simultanea su un dispositivo Azure Sphere.You can configure an Ethernet and a Wi-Fi network interface to run simultaneously on an Azure Sphere device. Le interfacce di rete Ethernet e Wi-Fi possono essere connesse a reti private o pubbliche (connesse a Internet).Ethernet and Wi-Fi network interfaces can be connected to public (internet-connected) or private networks. Almeno una delle interfacce deve essere connessa a una rete pubblica.At least one interface must be connected to a public network. È possibile configurare una sola interfaccia Ethernet alla volta.One only one Ethernet interface can be configured at a time.

Interfacce di rete pubblica e privataPrivate and public network interfaces

Se si usano un'interfaccia di rete pubblica e una privata, ad esempio un'interfaccia Ethernet privata e un'interfaccia Wi-Fi pubblica, il dispositivo Azure Sphere non svolgerà la funzione di router.If you use both public and private network interfaces, such as private Ethernet with public Wi-Fi, the Azure Sphere device will not act as a router. Non passerà automaticamente i pacchetti ricevuti sulla rete Ethernet alla rete Wi-Fi o viceversa.It won't automatically pass packets received on the Ethernet network to the Wi-Fi network, or vice versa. L'applicazione deve implementare l'intera logica che invia e riceve le informazioni su entrambe le reti.Your application must implement all logic that sends and receives information on both networks.

Doppia interfaccia di rete pubblicaDual public network interfaces

Se si usano due interfacce di rete in cui è abilitato l'indirizzamento IP dinamico, il sistema operativo tenta di usare l'interfaccia che era connessa alla rete al momento della selezione degli indirizzi del server DNS per la risoluzione dei nomi host.If you use two network interfaces that have dynamic IP addressing enabled, the OS attempts to use the first interface that connected to the network when it selects DNS server addresses for host name resolution. Se un'interfaccia si disconnette dalla rete, vengono usati automaticamente gli indirizzi del server DNS provenienti dall'altra interfaccia connessa.If an interface disconnects from the network, the DNS server addresses from the other connected interface are automatically used.

Indirizzo IP staticoStatic IP address

È possibile configurare un indirizzo IP statico in un'interfaccia Ethernet o Wi-Fi.You can configure a static IP address on an Ethernet or Wi-Fi interface. Per configurare una configurazione degli indirizzi IP statici, l'applicazione deve usare l' API di rete applibse il manifesto dell'applicazione   deve abilitare la funzionalità file networkconfig   .To set up a static IP address configuration, your application must use the applibs networking API, and the application manifest must enable the NetworkConfig capability. Nell'esempio relativo ai servizi di rete privata viene illustrato come connettere Azure Sphere a una rete privata e utilizzare diversi servizi di rete.The Private Network Services sample demonstrates how to connect Azure Sphere to a private network and use several network services.

Questo frammento di codice illustra come configurare un'interfaccia di rete con un indirizzo IP statico.This code snippet demonstrates how to configure a network interface with a static IP address.

Includere la riga seguente nella sezione funzionalità della app_manifest.jssu file nel modo seguente:Include the following line in the Capabilities section of the app_manifest.json file as follows:

"Capabilities": {
  "NetworkConfig": true
}

Includere i file di intestazione seguenti nell'applicazione:Include these header files in your application:

#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>

Impostare l'indirizzo IP, il subnet mask e il gateway per la configurazione IP.Set the IP address, subnet mask, and gateway for the IP configuration.

static const char staticIpInDotNotation[] = "yourStaticIp"; // Your static IP in x.x.x.x notation.
static const char subnetMaskInDotNotation[] =
    "yourSubnetMask"; // Your subnet mask in x.x.x.x notation.
static const char gatewayIpInDotNotation[] = "yourGatewayIp"; // Your gateway IP in x.x.x.x notation.

Specificare l'interfaccia di rete da configurare:Specify the network interface to configure:

static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.

Convertire gli indirizzi di rete in numeri interi e applicarli all'interfaccia di rete specificata.Convert the network addresses to integers and apply this to the specified network interface.

struct in_addr staticIpAddress;
struct in_addr subnetMask;
struct in_addr gatewayIpAddress;

Networking_IpConfig ipConfig;

// Convert the addresses from the numbers-and-dots notation into integers.
if (inet_pton(AF_INET, staticIpInDotNotation, &staticIpAddress) != 1) {
    Log_Debug("ERROR: Invalid static IP address or address family specified.\n");
    return -1;
}
if (inet_pton(AF_INET, subnetMaskInDotNotation, &subnetMask) != 1) {
    Log_Debug("ERROR: Invalid subnet mask or address family specified.\n");
    return -1;
}
if (inet_pton(AF_INET, gatewayIpInDotNotation, &gatewayIpAddress) != 1) {
    Log_Debug("ERROR: Invalid gateway IP address or address family specified.\n");
    return -1;
}

Networking_IpConfig_Init(&ipConfig);
Networking_IpConfig_EnableStaticIp(&ipConfig, staticIpAddress, subnetMask, gatewayIpAddress);

int result = Networking_IpConfig_Apply(networkInterfaceToConfigure, &ipConfig);
Networking_IpConfig_Destroy(&ipConfig);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_Apply: %d (%s)\n", errno, strerror(errno));
    return -1;
}

Indirizzo DNS staticoStatic DNS address

Se è stato configurato un dispositivo con un indirizzo IP statico e si richiede la risoluzione dei nomi, l'applicazione deve impostare un indirizzo DNS statico.If you have configured a device with a static IP and require name resolution your application must set a static DNS address. Usare Networking_IpConfig_EnableCustomDns e impostare uno o più resolver DNS validi.Use Networking_IpConfig_EnableCustomDns and set one or more valid DNS resolvers. Se sono impostati più resolver, verranno tutti sottoposti a query e la prima risposta DNS valida soddisferà la query.If multiple resolvers are set, they will all be queried, and the first valid DNS response will satisfy the query. Networking_IpConfig_EnableCustomDns possibile utilizzare anche per eseguire l'override del resolver corrente se ne è stato impostato uno tramite DHCP.Networking_IpConfig_EnableCustomDns may also be used to override the current resolver if one is set via DHCP.

Per configurare un'interfaccia di rete con server DNS personalizzati, il manifesto dell'applicazione deve abilitare la funzionalità file networkconfig.To configure a network interface with custom DNS servers, the application manifest must enable the NetworkConfig capability.

Includere la riga seguente nella sezione funzionalità della app_manifest.jssu file nel modo seguente:Include the following line in the Capabilities section of the app_manifest.json file as follows:

"Capabilities": {
  "NetworkConfig": true
}

Questo frammento di codice illustra come configurare un'interfaccia di rete con server DNS personalizzati.This code snippet demonstrates how to configure a network interface with custom DNS servers.

Includere i file di intestazione seguenti nell'applicazione:Include these header files in your application:

#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>

Specificare il numero di server DNS.Specify the number of DNS servers. È possibile specificare fino a tre server DNS.Up to three DNS servers can be specified. Il codice seguente imposta la matrice di tre indirizzi IP del server DNS da usare.The following code sets up the array of three DNS server IP addresses to use.

// A maximum of 3 DNS server addresses can be specified.
static const size_t numOfDnsServerAddressSpecified = 3;
static const char *dnsServerIpAddress[] = {
    "yourDnsServer1", "yourDnsServer2", "yourDnsServer3"}; // Your DNS servers in x.x.x.x notation.

Specificare l'interfaccia di rete da configurare.Specify the network interface to configure.

static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.

Convertire gli indirizzi di rete in numeri interi e applicare la configurazione.Convert the network addresses to integers and apply the configuration. Questa configurazione DNS esegue l'override di tutti i server DNS specificati da DHCP.This DNS configuration overrides any DNS servers specified by DHCP.

Networking_IpConfig ipConfig;

// Convert the addresses from the numbers-and-dots notation into integers.
struct in_addr dnsServers[numOfDnsServerAddressSpecified];
for (int i = 0; i < numOfDnsServerAddressSpecified; i++) {
    if (inet_pton(AF_INET, dnsServerIpAddress[i], &dnsServers[i]) != 1) {
        Log_Debug("ERROR: Invalid DNS server address or address family specified.\n");
        return -1;
    }
}

Networking_IpConfig_Init(&ipConfig);

int result =
    Networking_IpConfig_EnableCustomDns(&ipConfig, dnsServers, numOfDnsServerAddressSpecified);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_EnableCustomDns: %d (%s)\n", errno, strerror(errno));
    Networking_IpConfig_Destroy(&ipConfig);
    return -1;
}

result = Networking_IpConfig_Apply(networkInterfaceToConfigure, &ipConfig);
Networking_IpConfig_Destroy(&ipConfig);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_Apply: %d (%s)\n", errno, strerror(errno));
    return -1;
}

Server DHCPDHCP server

A un dispositivo client esterno connesso ad Azure Sphere tramite un'interfaccia Ethernet devono essere assegnati un indirizzo IP e altri parametri di rete in modo che sia in grado di comunicare con un'applicazione server nel dispositivo Azure Sphere.An external client device that is connected to Azure Sphere through an Ethernet interface must be assigned an IP address and other network parameters so that it can communicate with a server application on the Azure Sphere device. Tuttavia, alcuni dispositivi esterni non prevedono opzioni per configurare questi parametri.However, some external devices do not support a way to configure these parameters. Azure Sphere supporta un server DHCP tramite cui un'applicazione può fornire questa configurazione.Azure Sphere supports a DHCP server through which an application can provide this configuration. È necessario che la funzionalità DhcpService sia abilitata nel manifesto dell'applicazione.The application must enable the DhcpService capability in its application manifest.

L'applicazione Azure Sphere chiama Networking_DhcpServerConfig_Init per configurare il server in modo da fornire a un dispositivo client un indirizzo IP, una subnet mask, un indirizzo del gateway, la durata del lease e fino a tre indirizzi di server NTP.The Azure Sphere application calls Networking_DhcpServerConfig_Init to configure the server to provide an IP address, subnet mask, gateway address, lease duration, and up to three NTP server addresses to a client device. Nella versione corrente è possibile configurare un unico indirizzo IP.Only one IP address can be configured in the current release. Chiama quindi Networking_DhcpServer_Start per avviare il server su una specifica interfaccia di rete.It then calls Networking_DhcpServer_Start to start the server on a particular network interface. Dopo l'avvio del server DHCP, il dispositivo client può trasmettere messaggi DHCP in uscita per individuare e richiedere gli indirizzi IP al server DHCP sulla subnet specificata.After the DHCP server starts, the client device can send out broadcast DHCP messages to discover and request IP addresses from the DHCP server on the specified subnet.

Server SNTPSNTP server

Il server SNTP consente ai dispositivi client di sincronizzare la loro ora di sistema con quella del dispositivo Azure Sphere.The SNTP server enables client devices to synchronize their system time with that of the Azure Sphere device. Per usare il server, è necessario che la funzionalità SntpService sia abilitata nel manifesto dell'applicazione Azure Sphere.To use the server, the Azure Sphere application must enable the SntpService capability in its application manifest.

Per avviare il server, l'applicazione Azure Sphere chiama Networking_SntpServer_Start e specifica l'interfaccia di rete su cui verrà eseguito il server.To start the server, the Azure Sphere application calls Networking_SntpServer_Start and specifies the network interface on which the server will run. Il dispositivo client e il dispositivo Azure Sphere devono trovarsi nella stessa subnet locale della rete in cui è in esecuzione il server.The client device and the Azure Sphere device must be in the same local subnet of the network on which the server is running. Il dispositivo Azure Sphere deve essere connesso ad almeno una rete pubblica in modo da poter recuperare l'ora corrente da un server NTP (Network Time Protocol) pubblico.The Azure Sphere device must be connected to at least one public network, so that it can get the current time from a public network time protocol (NTP) server. Il server SNTP non risponde alle query finché non ha l'ora corrente.The SNTP server does not respond to queries until it has the current time.

Nota

Anche se un'applicazione può impostare direttamente l'ora di sistema, questa operazione non è consigliata perché l'ora non persiste quando il dispositivo viene spento.Although an application can set the system time directly, this is not recommended because the time does not persist when the device loses power. Per altre informazioni, vedere Gestire l'ora di sistema e l'orologio in tempo reale in Azure Sphere.Manage system time and the RTC on Azure Sphere has more information.

Porte in ascoltoListening ports

Se l'applicazione Azure Sphere è in ascolto per le connessioni TCP o UDP in ingresso, il manifesto dell'applicazione deve specificare le porte usate dall'applicazione.If the Azure Sphere application listens for incoming TCP or UDP connections, the application manifest must specify the ports that the application uses.

Concetti ed esempiConcepts and Samples