0

私は次の関数を作成し、正常に動作します。

int NetworkSocket::readDatagrams(unsigned char *buffer, string &srcAddress, unsigned short int & srcPort,size_t frameSize)
{

    unsigned int maximumPacketSize = sizeof(buffer);//frameSize ;
    int returnValue ;
    sockaddr_in from;
    socklen_t fromLength = sizeof( from );
    int receivedBytes;

    fromLength = sizeof(this->getSocketAddressStructureOfServer());
    receivedBytes = recvfrom( this->socketFD, buffer, maximumPacketSize, 0, (sockaddr *)&this->getSocketAddressStructureOfServer(), &fromLength     ) ;

    cout << receivedBytes << endl;
    returnValue = receivedBytes;
    if ( receivedBytes <= 0 )
        returnValue = -1;

    /// exporting data
    //
    srcAddress = inet_ntoa(this->getSocketAddressStructureOfServer().sin_addr);
    srcPort = ntohs( ( unsigned short int)this->getSocketAddressStructureOfServer().sin_port );


    return returnValue;
}

適用すると、ref srcAddressとportに戻ります。バッファがいっぱいですが、printfバッファができません。どうすればよいですか?wirehakr show 000010001これは5バイトを意味し、それを調べてデータと比較する必要があります。

4

1 に答える 1

3
unsigned int maximumPacketSize = sizeof(buffer);//frameSize ;

ポインタ変数のサイズ(32ビットシステムでは常に「4」に等しい)を要求しているため、この行に誤りがあります。最大バッファサイズを手動で渡すか、単に「知っている」必要があります。これは、最初にインスタンス化したため、問題にはなりません。

つまり、本質的には、4バイトを超えることはできません。

于 2012-08-05T17:13:05.223 に答える