免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: iw1210
打印 上一主题 下一主题

[C] UDP连接服务器端怎么才能知道对方socket的描述符? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2013-01-19 15:35 |只看该作者
回复 20# iw1210

你非要这么理解也行。服务器最终目的都是服务于客户的。
然后,你的问题是?

论坛徽章:
0
22 [报告]
发表于 2013-01-19 15:46 |只看该作者
本帖最后由 iw1210 于 2013-01-19 15:54 编辑

回复 21# sqfasd


    ssize_t send(int sockfd, const void *buf, size_t len, int flags);

   ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);

我是看send和sendto函数参数的不同,才这么理解的。
send函数专用于TCP链接,sendto函数专用与UDP连接。
send函数只有一个能联想到客户端地址的参数,就是第一个参数sockfd。在服务器端每一个客户都有一个专用的socket,毫无疑问就可以把它看作这个客户端的地址。
sendto能联想到客户端地址的参数有两个:sockfd 和 dest_addr,但我发现在实际应用中sockfd参数对所有UDP客户都使用同一个数值,所以我推断这个socket是为所有UDP客户使用的,dest_addr才真正是客户端的地址(ip地址和端口号)。

论坛徽章:
0
23 [报告]
发表于 2013-01-19 17:03 |只看该作者
回复 22# iw1210
  1. int send(int sockfd, const void *msg, int len, int flags);
  2. int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, socklen_t tolen);
复制代码
send() 中的 sockfd 确实是客户端 socket 在本机的一种映射,但 sendto() 中的 sockfd 和客户端没有关系,是本地用来发送 UDP 信息的 socket。

作为一个反例,可以考虑:

  1、如果没有客户端,你照样可以 sendto() 发送。(sockfd 对应什么?)
  2、如果是广播,接收者是多个客户端,你照样用 sendto() 发送。(sockfd 对应哪个?)

如果如你所想,sockfd 是所有客户端共用,这两种情况下会就没法对应了。

论坛徽章:
0
24 [报告]
发表于 2013-01-19 17:11 |只看该作者
回复 23# timothyqiu


    “如果没有客户端,你照样可以 sendto() 发送?”

哦? 发送哪里了?请教~

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
25 [报告]
发表于 2013-01-19 17:20 |只看该作者
recvfrom的时候拿到

论坛徽章:
0
26 [报告]
发表于 2013-01-19 17:26 |只看该作者
回复 24# iw1210

呃……我要表达的意思就是 sendto() 调用是成功的,但是没有人接收,这个时候如果按你的说法「sendto 的 sockfd 是所有客户端使用」,那么此时没有人接收却成功,就无法解释 sockfd 了。

所以我说是「反例」 = =

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
27 [报告]
发表于 2013-01-20 10:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP