Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 网络数据_C++_Linux_Sockets_Udp - Fatal编程技术网

C++ 网络数据

C++ 网络数据,c++,linux,sockets,udp,C++,Linux,Sockets,Udp,我编写了以下函数,效果很好: int NetworkSocket::readDatagrams(unsigned char *buffer, string &srcAddress, unsigned short int & srcPort,size_t frameSize) { unsigned int maximumPacketSize = sizeof(buffer);//frameSize ; int returnValue ; sockaddr_

我编写了以下函数,效果很好:

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;
}
int-NetworkSocket::readDatagrams(无符号字符*缓冲区、字符串和srcAddress、无符号短int和srcPort、大小\u t帧大小)
{
unsigned int maximumPacketSize=sizeof(buffer);//帧大小;
返回值;
sockaddr_从中输入;
socklen\u t from长度=sizeof(from);
int接收字节;
fromLength=sizeof(此->getSocketAddressStructureOfServer());
receivedBytes=recvfrom(this->socketFD,buffer,maximumPacketSize,0,(sockaddr*)和this->getSocketAddressStructureOfServer(),&fromLength);
库特
这一行是错误的,因为您正在请求指针变量的大小(在32位系统上总是等于“4”)。您必须手动传递最大缓冲区大小,或者简单地“知道”它,这应该不是问题,因为您首先实例化了它

从本质上说,这意味着,您永远无法获得超过4个字节的数据

这一行是错误的,因为您正在请求指针变量的大小(在32位系统上总是等于“4”)。您必须手动传递最大缓冲区大小,或者简单地“知道”它,这应该不是问题,因为您首先实例化了它


从本质上讲,这意味着您永远无法获得超过4个字节。

请注意
unsigned int maximumPacketSize=sizeof(buffer)“/CODE >将最大包大小设置为<代码> char */COD>,通常为4或8字节。此外,我看不到确切的行,PINTF失败……或任何PrtfF,对于这一点。<代码>::/>是C.的语法错误,它是C++吗?请注意,<代码>无符号int最大值包大小= SIZEOF(缓冲器)“/CODE>将最大包大小设置为<代码> char */COD>,通常为4或8字节。此外,我看不到确切的行,PrtTf失败……或任何Prtff,对于这一点。<代码>::/C>是C.的语法错误。它是C++吗?现在,您有没有检查它们的想法?检查一下确切的内容。缓冲区的内容。?是否传输数字?字符串?如果是数字,请尝试使用printf(“%d”,*((int*)buffer));,这将临时将缓冲区转换为“int*数组”,并返回第一个元素。如果传输字符串,请使用printf(“%s”,buffer));但请确保字符串以“0”结尾。现在,您是否知道如何检查它们?具体检查什么?缓冲区的内容?是否正在传输数字?字符串?如果是数字,请尝试使用printf(“%d”,*((int*)buffer)),它将临时将缓冲区强制转换为“int*数组”,并返回第一个元素。如果要传输字符串,请使用printf(“%s”,buffer);,但请确保字符串以“0”结尾。
unsigned int maximumPacketSize = sizeof(buffer);//frameSize ;