sendto() - C 中的 UDP 单播
题
我有下面的函数发送 message
到 next_hop
(例如。192.168.0.10) 作为 UDP 单播。当我编译代码时,我收到以下警告 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);
}
解决方案
char * message
方法:
(char *) message // message is a pointer-to-char
和:
char (*message) // *message is a char
所以当你需要通过一个 char*
, , 使用 message
. 。如果您需要该缓冲区中的第一个字符,请使用 *message
.
警告:
char * a, b;
使 a
A char*
, , 但 b
一个平原 char
, ,无论你在哪里放置空格。
第五个参数可能需要转换为 struct sockaddr*
手动,具体取决于它在您的系统上的原型设计方式。
不隶属于 StackOverflow