读书人

UDP怎么发送浮点数组

发布时间: 2012-01-13 22:43:29 作者: rapoo

UDP如何发送浮点数组?
我想用sendto发送一个大浮点数组给其他机器。下面代码是发送字符的。
请问在下面这个小程序中怎么改一下能发float或double的东西?
谢谢。

WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;

}



if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup( );
return;
}

SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr( "127.0.0.1 ");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6117);


sendto(sockClient, "hello,patrick ",strlen( "hello patrick ")+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

closesocket(sockClient);
WSACleanup();
}

[解决办法]
任何大浮点数组都可以用字符char代替,而发送过后,你的协议定义成什么样子,就在接收时转化过来就行了。
[解决办法]
sprintf
[解决办法]
用结构体吧
[解决办法]

1。把浮点数用memcpy,copy到字符串中发送,接收方再memcpy到float中
2. 直接用sprintf(s, "%f ",f)到字符s中,接收方atof(s)即可

[解决办法]
memcpy比较好,效率高,占用字节少,不需函数转换
[解决办法]
//float数组100个元素,并初始化值
float f[100];
for(int i=0;i <sizeof(f)/sizeof(float);i++)
{
f[i]=1.4+i;
TRACE( "index=%d,%f\n ",i,f[i]);
}

//分配待发送的包,第一个字节存放数组个数,实际情况可能需要更多字节

BYTE *pBytes=new BYTE[sizeof(f)+1];
pBytes[0]=(BYTE)(sizeof(f)/sizeof(float));

//填充缓冲区
memmove(pBytes+1,(BYTE *)f,sizeof(f));
//发送缓冲区
sendto(sockClient,pBytes,sizeof(f)+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));


//接受方,取得数组元素个数
int x=(int)pBytes[0];
//转换为float 指针
float *f2=(float *)(pBytes+1);
//按照大小输出
for(i=0;i <x;i++)
{

TRACE( "index=%d,%f\n ",i,*(f2+i));
}

delete [] pBytes;

读书人网 >VC/MFC

热点推荐