当前位置:  技术问答>linux和unix

recvfrom源IP地址地址和端口

    来源: 互联网  发布时间:2017-05-15

    本文导语:  基于UDP协议,客户端发送一个消息给服务器,服务器开一个线程,专门用来读取客户端发送的消息(recvfrom函数),按理说,recvfrom的第三个参数是客户端addr结构的指针,这里存放着客户端的IP和端口信息,但是我解析之...

基于UDP协议,客户端发送一个消息给服务器,服务器开一个线程,专门用来读取客户端发送的消息(recvfrom函数),按理说,recvfrom的第三个参数是客户端addr结构的指针,这里存放着客户端的IP和端口信息,但是我解析之后的数据是不对的,但是我用这个结构作为sendto的目的地址,对方可以收到,这是怎么回事?
addr结构如下
typedef struct tagIn_Addr
{
unsigned long in_addr;
}IN_ADDR_T;

typedef struct tagSockaddr
{
unsigned short int sin_family;
unsigned short int sin_port;
IN_ADDR_T sin_addr;
unsigned char sin_zero[8];
}SOCK_ADDR_T;

线程处理函数如下:
		SOCK_ADDR_T stSockAddr = {0};
char acReadBuff[256] = {0};
int nSinSize = sizeof(SOCK_ADDR_T);

while(1)
{
memset(&stSockAddr, 0x00, nSinSize);

recvfrom(s_nSockFd, acReadBuff, 256, 0, (struct sockaddr *)&stSockAddr, &nSinSize); //s_nSockFd:socket之前创建号的

printf("Get a new message:%sn", acReadBuff);
printf("IP:%sn", (char *)inet_ntoa(stSockAddr.sin_addr));
printf("Port:%dn", htons(stSockAddr.sin_port));
printf("nSinSize = %dn", nSinSize);

sendto(s_nSockFd, "Serv Recv data", 15, 0, (struct sockaddr *)&stSockAddr, nSinSize);

sleep(1);
}

|
有现成的sockaddr_in结构体你不用,为什么非要重复发明车轮再定义一个结构体?

|
把变量stSockAddr的类型改成系统自带的sockaddr_in类型试试,看了半天就发现这个错:
printf("Port:%dn", htons(stSockAddr.sin_port));//应该是ntohs()


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • udp socket recvfrom偶尔会返回-1,perror打印出的提示是"recvfrom: Resource temporarily unavailable"
  • udp socket通讯,recvfrom()一直返回-1,perror提示"recvfrom: Bad address"
  • 关于recvfrom函数的一些问题
  • recvfrom阻塞时间长了,会不会导致服务端程序不灵活?
  • 怎么解除recvfrom阻塞的阻塞状态
  • [求助]如何让阻塞的信号量、recvfrom退出?
  • accept,recvfrom接收到奇怪的ip
  • alarm中关闭了socketfd,但是recvfrom无法知道
  • socket 编程recvfrom 问题...求教
  • recvfrom() 接收线程阻塞
  • [疑惑]UDP中的recvfrom奇怪现象,怎么保持上次sendto的内容???哪位帮解释一下
  • recvfrom是不是线程安全的?
  • 关于recvfrom和read函数的接收速率问题
  • socket编程,使用recvfrom()函数监听问题。
  • recvfrom函数,已经设置好非阻塞模式,是否还存在阻塞的风险?
  • UX:ping: ERROR: recvfrom: No route to host
  • recvfrom(): Resource temporarily unavailable
  • 关于网络通信中recvfrom和sendto的用法
  • Linux下的recvfrom为什么一直阻塞
  • linux下udp的recvfrom问题,大神,我需要你。。。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,