0
    struct sockaddr_in  addrSenderOfVideo
    struct sockaddr_in   client_addr;     // Client Internet address
    char* buffer = new char[2];
    int sizeOfBuffer=1050;
    int clientfd;
    char* bufferWithPacketData = new char[sizeOfBuffer];
    extern int                  client_s;        // Client socket 

    if (client_s < 0)
          {
            printf("*** ERROR - socket() failed \n");
          }

           //Client address.
      client_addr.sin_family = AF_INET;
      client_addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP address to use
      client_addr.sin_port = htons(portNumClient); 

    clientfd = bind(client_s,(const sockaddr*) &client_addr, sizeof(client_addr));
    fprintf (stderr, "inside of listen for new packet<; clientfd is %d",clientfd);

      if (clientfd < 0) 
        {
        fprintf (stderr, "WARNING -1 doing BIND!");

        }


    int n = recvfrom (client_s, bufferWithPacketData, sizeOfBuffer, 0,(struct sockaddr*)&addrSenderOfVideo, &fromlen);

   retcode = sendto(client_s, buffer,  symbol_size, 0,
          (struct sockaddr *)&addrSenderOfVideo, sizeof(addrSenderOfVideo) );

sendtoが呼び出されると、エラー「9errnoisBadaddress」が出力されます。これの原因は何ですか?これを解決するにはどうすればよいですか?

データは関数recvfromで送信者から受信されaddrSenderOfVideo、ポートとIP番号の両方が含まれています。送信者のIPは「127.0.0.1」であり、これはに含まれるIPでもありaddrSenderOfVideoます。

4

1 に答える 1

2

2つのパラメーターがあり、そのパラメーターはsendtoユーザースペースバッファーへのポインターであるためEFAULT、データバッファーとアドレスをトリガーする可能性があります。アドレスは固定サイズのローカル変数を指しているため、原因ではないようです。したがって、それはデータバッファでなければなりません。データバッファはサイズ2の配列を指しています。初期化の方法を示していませんsymbol_sizesymbol_sizeパーチャンスは2より大きいですか?

于 2012-05-30T20:02:02.947 に答える