sendto() - UDP unicast в C

Имам функцията по-долу, която изпраща message към next_hop (напр. 192.168.0.10) като UDP unicast. Когато компилирам кода, получавам следното предупреждение passing argument 2 of 'sendto' makes pointer from integer without a cast за ред if(sendto(s, *message, BUFSIZE, 0, &si_other, slen) == -1). Как мога да коригирам кода? Благодаря ви за отговорите

void log_msg_send(char *message, char *next_hop){

struct sockaddr_in si_other;
int s, slen = sizeof(si_other);
int port_no = 3333;
char *nexthop;
unsigned short Server_port;
nexthop = next_hop;
Server_port = port_no;

if((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
    fprintf(stderr,"socket error");
    exit(1);
}

memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(Server_port);

if(inet_aton(nexthop, &si_other.sin_addr) == 0){
    fprintf(stderr,"socket error");
    exit(1);
}

if(sendto(s, *message, BUFSIZE, 0, &si_other, slen) == -1){
    fprintf(stderr,"socket error");
    exit(1);
}

close(s);

}


person johan    schedule 21.05.2012    source източник
comment
Защо все пак дереференцирате message?   -  person zneak    schedule 21.05.2012
comment
Премахнах *, сега получавам следното предупреждение, предаващо аргумент 5 на „sendto“ от несъвместим тип указател   -  person johan    schedule 21.05.2012


Отговори (1)


char * message

означава:

(char *) message // message is a pointer-to-char

И:

char (*message) // *message is a char

Така че, когато трябва да подадете char*, използвайте message. Ако имате нужда от първия знак в този буфер, използвайте *message.


Внимание:

char * a, b; 

Прави a char*, но b обикновен char, където и да поставите интервали.


Петият аргумент може да се наложи да бъде прехвърлен към struct sockaddr* ръчно, в зависимост от това как е прототипиран във вашата система.

person Mat    schedule 21.05.2012