免费注册 查看新帖 |

Chinaunix

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

一个头痛的问题! UDP网络编程的sendto和recvfrom!!请求大家帮助 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-19 13:13 |只看该作者
回复 6# guaguaguaguaxi

直接在server端指定一个本机监听的ip和端口,然后用recvfrom收包,recvfrom函数返回后第三个和第四个参数给出的就是发送方的地址信息了。然后直接给那个地址sendto就可以回复了。

论坛徽章:
0
12 [报告]
发表于 2010-06-19 14:38 |只看该作者
我也觉得楼上说得对,没有看到你TCP客户端的实现方式,但是读了楼主的源码之后,过程好像是:TCP客户端发送消 ...
memoryboxes 发表于 2010-06-19 12:25



    我错了,我犯了严重的错误,我还以为TCP创建连接之后我就使用客户端的IP和PORT来sendto,其实我只要客户端的IP,端口是另外一个.
不好意思,白痴了我.

再请问下,你知道怎么获取服务器端本机的IP吗,兼容IPV4,IPV6的,如果只是单独其中一个,我就知道用getsockname函数,但是要兼容的话,我就不会了,用getaddrinfo这个函数只能得到::

论坛徽章:
0
13 [报告]
发表于 2010-06-19 14:47 |只看该作者
事先知道客户端的IP和端口,在服务器端直接sendto,那此时的客户端程序应该怎么写,可以直接recvfrom吗??需要s ...
memoryboxes 发表于 2010-06-19 12:42



    其实,我也是刚接触网络编程这方面,水平很菜,很谢谢你的分析,让我收益很多.

你说"但比如你向192.168.1.2:8000 发送一个udp数据报的话能是recvfrom()到的,但前提是你得bind()一下。而我们平时的sendto()调用时是内核为我们选择一个临时端口的。"
这个是服务器端来bind()吧???我看到过在客户端也bind()的,搞不懂.

论坛徽章:
0
14 [报告]
发表于 2010-06-19 14:49 |只看该作者
回复  guaguaguaguaxi

直接在server端指定一个本机监听的ip和端口,然后用recvfrom收包,recvfrom函数返 ...
聪聪知不道 发表于 2010-06-19 13:13



    知道了,之前是我的失误,弄不清端口.谢谢你的回答咯.

论坛徽章:
0
15 [报告]
发表于 2010-06-19 14:51 |只看该作者
其实我是不太明白你为什么要这样做。你用TCP的方式去connect和用UDP的方式sendto,不是都是一次调用吗?未必 ...
buptzwp 发表于 2010-06-19 12:40


我都被自己搞糊涂了,现在弄明白了,谢谢你的回答了.

论坛徽章:
0
16 [报告]
发表于 2010-06-19 20:35 |只看该作者
本帖最后由 memoryboxes 于 2010-06-19 20:36 编辑

"这个是服务器端来bind()吧???我看到过在客户端也bind()的,搞不懂."

bind()是可以在客户端调用的,只是平常不怎么用。因为我们调用connect()和sendto()的时候由内核选择通信的端口号,可是如果你要自己制定哪个端口发送接收数据的话,就要bind()一下啦。这个测试的时候用的多一点吧,我猜的,因为我也没实际写过什么网络通信程序。

关于ipv6和ipv4的可移植性,我只知道去除gethostbyname,gethostbyaddr,使用getaddrinfo和getnameinfo,还有在bind,connect,recvfrom中用指针及大小来将套接口地址结构作为不透明对象来处理...之类的。建议参考一下《unix网络编程》这本经典,里面对这些问题有很详细的描述。

我也是个大菜鸟,只是靠兴趣自学了一点,没什么实际经验,学习这个最好的参考书就是《unix网络编程》啦。
希望能帮到你。

论坛徽章:
0
17 [报告]
发表于 2010-06-21 08:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
18 [报告]
发表于 2010-06-21 09:02 |只看该作者
udp没有accept,lz貌似把tcp、UDP的处理方式弄混了。。。

论坛徽章:
0
19 [报告]
发表于 2010-06-21 11:54 |只看该作者
回复 16# memoryboxes


    呵呵,好,我去找那本书看看,总而言之非常谢谢你的帮助.

论坛徽章:
0
20 [报告]
发表于 2010-06-21 11:55 |只看该作者
回复 17# suavelee


    呵呵,谢谢你的加油,我会再接再厉的,你也是哦.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP