- 论坛徽章:
- 0
|
再次麻烦你!
现在确定下来,client端发过来的包是个结构体,
struct Send
{
float x; //发送10.0000
float y; //发送20.0000
float z; //发送30.0000
}m_Send;
我把server程序改成接收这个结构体的了,程序运行后,n=recvfrom(。。。。);
后n一直是大于0,应该是能接收到包对吧?
但我printf("m_Recv.x= %f",m_Recv.x);
printf("m_Recv.y= %f",m_Recv.y);
printf("m_Recv.z= %f",m_Recv.z); 结果m_Recy.x=0.000000;
m_Recy.y=0.000000;m_Recy.z=0.000000;也就是没有取到接收到的数据。
能帮我查查程序哪里错了吗?尤其是recvfrom函数,我一直这里很糊涂。
我好着急呀!!!!!!能帮我好好查查吗??????????
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/select.h>
#include <sys/time.h>
#define SERVER_PORT 1500
#define MAX_MSG_SIZE 1024
void udps_respon(int sockfd)
{
struct sockaddr_in addr;
int n,ret;
socklen_t addrlen;
struct timeval tv;
fd_set rdset;
struct RECV
{
float x;
float y;
float z;
}m_Recv;
while(1)
{
tv.tv_sec = 1;
tv.tv_usec = 0;
FD_ZERO(&rdset);
FD_SET(sockfd,&rdset);
ret = select(sockfd+1,&rdset,NULL,NULL,&tv);
if(ret == -1)
{
printf("select error %s\n ",strerror(errno));
exit(-1);
}
if(ret == 0)
{
printf("select timeout, continue cricle\n"
continue;
}
if(FD_ISSET(sockfd,&rdset))
{
/* 从网络上读,写到网络上面去 */
memset(&m_Recv, 0, sizeof(&m_Recv));
addrlen = sizeof(struct sockaddr);
n=recvfrom(sockfd,&m_Recv,MAX_MSG_SIZE,0,
(struct sockaddr*)&addr,&addrlen);
if(n <= 0)
{
fprintf(stderr, "Recv Error %s\n", strerror(errno));
return;
}
else
{
/* 显示服务端已经收到了信息 */
printf("m_Recv.x= %f",m_Recv.x);
printf("m_Recv.y= %f",m_Recv.y);
printf("m_Recv.z= %f",m_Recv.z);
}
}
}
}
int main(void)
{
int sockfd;
struct sockaddr_in addr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
fprintf(stderr,"Socket Error:%s\n",strerror(errno));
exit(1);
}
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
addr.sin_port=htons(SERVER_PORT);
if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)
{
fprintf(stderr,"Bind Error:%s\n",strerror(errno));
exit(1);
}
udps_respon(sockfd);
close(sockfd);
}
[ 本帖最后由 berryfly 于 2005-11-3 15:34 编辑 ] |
|