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 ;