warum die sendto-Funktion muss der Dritte parameter, in-socket-Programmierung
War ich neue socket-Programm.
Wann lernen die sendto
Funktion als Vorbild:
ssize_t sendto(int socket, const void *message, size_t length,
int flags, const struct sockaddr *dest_addr,
socklen_t dest_len);
Ich erfahren, dass die "message" hat, enthalten die Ziel-IP, und die dest_addr
argument legt die Ziel-IP-Adresse.
Gibt es sonstige Nutzung der dest_addr
argument?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keine Nachricht nicht enthalten die Zieladresse, nur die payload bytes.
Werden, wenn man mit raw-sockets... Und man sollte das nicht tun, wenn man neue socket-Programmierung.
man 7 raw
: "Senden über raw-sockets sollte die IP-Protokoll aus sin_port; diese Fähigkeit war verloren in Linux 2.2. Die Problemumgehung ist die Verwendung von IP_HDRINCL". Also meine Vermutung ist, dass diedest_*
Argumente werden meist ignoriert, und Sie würden besser mit nursend
stattsendto
.Ich denke, du verwechselst "Nachricht" und "dest_addr".
Schauen wir uns den Prototyp für "sendto" in erweiterter form:
sockfd - dies ist der socket, die Sie erstellt haben mit einem Aufruf von socket()
buf - dies ist ein Zeiger auf ein ARRAY VON BYTES (d.h. Sie hätten buf vom Typ char* ). Das heißt, das sind die Daten, die Sie senden möchten, über das Netz gekapselt in einem UDP-Paket.
Länge - dies ist, wie viele bytes in das array. Wenn Sie nicht bestanden hat, "Länge", wäre es nicht wissen, wenn "buf" wurde 1 byte oder 10000 bytes.
Flaggen - Regel 0. Das ist advanced stuff
dest_addr - dies ist ein Zeiger auf die Zieladresse. In der Regel initialisieren Sie eine sockaddr_in-Instanz und warf seine Zeiger Wert auf eine sockaddr* Typ.
addrlen die Größe des dest_addr. in der Regel, sizeof(sockaddr_in). Adresse Länge ist variabel, da dest_addr konnte Zeiger auf eine IPV4-Adresse (sockaddr_in-Typ) oder eine IPV6-Adresse (sockaddr_in6-Typ) oder eine andere Art.
Beispiel für das senden eines Pakets vom lokalen port 9999 auf dem remote-host "1.2.3.4" auf dem port 8888. Fehlerüberprüfung von return-codes, die Links für die Kürze.
Nein, die Nachricht Enthält, was Sie senden, hier ist ein Beispiel: