Ok, ich bin noch neu in der Verwendung von C-Sockets, aber ich frage mich, ob es eine Möglichkeit gibt, die IP-Adresse hinzufügen laufende setsockopt hinzufügen? Wenn Sie sich meinen Code unten ansehen, habe ich alles in meinen Multicast-Sockets bereit zum Senden außer der Definition der Variable mc_addr, die meine IP-Adresse ist. Mache ich etwas falsch, das ist wirklich spürbar? Wenn ja, zögern Sie nicht, lassen Sie mich wissen oder bieten Sie Ihre Vorschläge. Im Moment bin ich hauptsächlich besorgt darum, die Variable mc_addr auszufüllen. Ich habe noch nie in C programmiert (nur Python, C++ und seit Beginn dieses Sommers objectove-C), deshalb weiß ich ALLES NICHT, was es über die C-Sprache zu wissen gibt, und suche Hilfe.Extrahieren von IP-Adresse aus C-Sockets
file.h
#define MYPORT 5673 /* port for our multicast socket */
int sock; /* socket descriptor */
char send_str[MAX_LEN]; /* string to send */
struct sockaddr_in mc_addr; /* socket address structure */
unsigned int send_len; /* length of string to send */
char* mc_addr_str; /* multicast IP address */
unsigned short mc_port; /* multicast port */
unsigned char mc_ttl; /* time to live (hop count) */
file.c
mc_port = MYPORT;
/* create a socket for sending to the multicast address */
if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
NSLog(@"ERROR: broadcastMessage - socket() failed");
return 1;
}
/* set the TTL (time to live/hop count) for the send */
if ((setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL,
(void*) &mc_ttl, sizeof(mc_ttl))) < 0) {
NSLog(@"ERROR: broadcastMessage - setsockopt() failed");
return 1;
}
// define the IP address we will be using
mc_addr = // ???
/* construct a multicast address structure */
memset(&mc_addr, 0, sizeof(mc_addr));
mc_addr.sin_family = AF_INET;
mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str);
mc_addr.sin_port = htons(mc_port);
/* clear send buffer */
memset(send_str, 0, sizeof(send_str));
while (fgets(send_str, MAX_LEN, stdin)) {
send_len = strlen(send_str);
/* send string to multicast address */
if ((sendto(sock, send_str, send_len, 0,
(struct sockaddr *) &mc_addr, sizeof(mc_addr))) != send_len) {
NSLog(@"ERROR: broadcastMessage - sendto() sent incorrect number of bytes");
return 1;
}
/* clear send buffer */
memset(send_str, 0, sizeof(send_str));
}
close(sock);
return 0;
Siehe http://stackoverflow.com/questions/236231/how-do-i-choose-a-multicast-address-for-my-applications-use – mark4o