首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

UDP怎么发送浮点数组

2012-01-13 
UDP如何发送浮点数组?我想用sendto发送一个大浮点数组给其他机器。下面代码是发送字符的。请问在下面这个小

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;

热点排行