为了账号安全,请及时绑定邮箱和手机立即绑定

您好,为什么recvfrom函数得到的IP地址不对?

您好,为什么recvfrom函数得到的IP地址不对?

阿晨1998 2021-11-03 11:07:56
#define SERVER_PORT_NUM 5002#define REQUEST_MSG_SIZE 1024struct request{int display;char message[REQUEST_MSG_SIZE];};#include "vxworks.h"#include "sockLib.h"#include "inetLib.h"#include "stdioLib.h"#include "strLib.h"#include "hostLib.h"#include "ioLib.h"STATUS udpServer(){struct sockaddr_in serverAddr;struct sockaddr_in clientAddr;struct request clientRequest;int sockAddrSize_s;int sockAddrSize_c;int sFd;char inetAddr[1024];sockAddrSize_s=sizeof(struct sockaddr_in);sockAddrSize_c=sizeof(struct sockaddr_in);printf("size =%d\n",sockAddrSize_c);bzero((char*)&serverAddr,sockAddrSize_s);/*serverAddr.sin_len=(u_char)sockAddrSize_s;*/serverAddr.sin_family=AF_INET;serverAddr.sin_port=htons(SERVER_PORT_NUM);serverAddr.sin_addr.s_addr=inet_addr("0.0.0.0");  if((sFd=socket(AF_INET,SOCK_DGRAM,0))==ERROR){perror("error in create server socket!\n");return(ERROR);}bind(sFd,(struct sockaddr*)&serverAddr,sockAddrSize_s);printf("waitting...\n");for(;;){recvfrom(sFd,(char*)&clientRequest,sizeof(clientRequest),0,(struct sockaddr*)&clientAddr,&sockAddrSize_c);if(clientRequest.display){inet_ntoa_b(clientAddr.sin_addr,inetAddr);printf("MSG FROM CLIENT (internet address %s ,port %d):\n%s\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port),clientRequest.message);}}}服务器是在目标机上运行的,目标机的IP是:169.254.43.254,主机(客户端)是:169.254.43.215,但是通过recvfrom得到的IP地址却是169.254.43.254,而不是169.254.43.215???请教大家了,忙了一下午都没解决这个问题。谢谢了!!!
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

while(1)
{
recvfrom(sockfd, readbuff, UDP_CMD_BUFF_LENGTH - 1, 0, (struct sockaddr *)&Glob_remot_88_port_add, &len);
PRINT("[recevudp]len %d IP is %s\n", len, inet_ntoa(Glob_remot_88_port_add.sin_addr));
}
这个函数, 第一次接受打印出的发送方IP地址总是0.0.0.0;
解决方法:
在recvfrom之前加一句: len = sizeof(struct sockaddr);
即可

查看完整回答
反对 回复 2021-11-07
?
慕森王

TA贡献1777条经验 获得超3个赞

169.254.x.x的地址是没设定IP地址时,机器产生的伪地址。
给网卡真正设个地址再看看

查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 444 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信