0

http://www.abc.se/~m6695/udp.htmlのコードを使用します

コードは正常に動作します。メッセージが送信され、サーバーがそれを受信することがわかります。しかし、プログラムをビルドすると、「 」の行で次のように「互換性のないポインタ型から 'sendto' の引数 5 を渡す [デフォルトで有効]」が表示されますif (sendto(s, buf, BUFSIZE, 0, &si_other, slen)==-1){。どなたか直し方教えていただけるとありがたいです。ありがとうございました

    #define  MAXSTRINGLENGTH 128
#define BUFSIZE 512

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

int main(int argc, char** argv) {
    char hello[] = "hello bitches";
    char next_hop[]= "192.168.1.178";
    log_msg_send(hello, next_hop);
}

void log_msg_send(char *message, char *next_hop){
    char SRV_IP[16]; 
    strcpy(SRV_IP,  next_hop);

         struct sockaddr_in si_other;
         int s, i, slen=sizeof(si_other);
         char buf[50] ;
         strcpy(buf, message);

        if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1){
          fprintf(stderr, "inet_aton() failed\n");
          exit(1);
        }

        memset((char *) &si_other, 0, sizeof(si_other));
        si_other.sin_family = AF_INET;
        si_other.sin_port = htons(33333);
        if (inet_aton(SRV_IP, &si_other.sin_addr)==0) {
          fprintf(stderr, "inet_aton() failed\n");
          exit(1);
        }
          printf("Sending the packet %d\n", i);
          if (sendto(s, buf, BUFSIZE, 0, &si_other, slen)==-1){
          fprintf(stderr, "inet_aton() failed\n");
          exit(1);
        }

        close(s);

}
4

4 に答える 4

4

クイックフィックス:

sendto(s, buf, BUFSIZE, 0, (struct sockaddr *)&si_other, slen)

この変換が必要なsendto()のはstruct sockaddr、特定のソケット アドレス タイプがstruct sockaddr_in.

于 2012-05-22T19:31:13.457 に答える
3

POSIX ドキュメントから:

ssize_t sendto(int socket, const void *message, size_t length,
   int flags, const struct sockaddr *dest_addr,
   socklen_t dest_len);

したがって、 の 5 番目の引数sendto()struct sockaddr *. ただし、 (memory layout-compatible) を渡していますstruct sockadd_in *。修正: 適切なポインター型にキャストします。

sendto(s, buf, BUFSIZE, 0, (struct sockaddr *)&si_other, slen)
于 2012-05-22T19:31:15.687 に答える
3

これを確認してください:

sendto(s, buf, BUFSIZE, 0, (SOCKADDR *)&si_other, slen)

どこ:

typedef struct sockaddr SOCKADDR;
于 2012-05-22T19:33:19.107 に答える