Chinaunix

标题: UDP 可以这样实现吗? [打印本页]

作者: anank    时间: 2008-09-08 17:19
标题: UDP 可以这样实现吗?
我学习网络编程还没多长时间,最近在看一个项目代码。感觉有些奇怪。

请看以下描述:(以下通信均用UDP来实现)
------------------------------------
C 为客户端, S为服务器端

S 绑定端口 10000,等待接收信息

C 利用UDP发送信息给 S

由于UDP sendto 不能指定 本地端口,只能指定远端的IP和端口

所以:
      (1)发送第1次 C 可能利用端口 20001,S 需要回信息给 C的端口:20001
      (1)发送第2次 C 可能利用端口 20002,S 需要回信息给 C的端口:20002
      (1)发送第3次 C 可能利用端口 20003,S 需要回信息给 C的端口:20003
      (1)发送第4次 C 可能利用端口 20004,S 需要回信息给 C的端口:20004


但是据我自己现在的知识,UDP用某个端口接收数据报之前,要事先绑定的。怎么能实现用“动态端口“接收呢?
【动态端口:用哪个端口发出去,就用哪个端口接收】


请大家讲讲,谢谢了。
作者: anank    时间: 2008-09-08 17:29
大家帮帮忙哦,因为这个地方代码看不下去了。。。
==================================
对了,还有一个问题,呵呵。

(1) 怎样 取得UDP 发送时用的那个端口?

[ 本帖最后由 anank 于 2008-9-8 17:32 编辑 ]
作者: cookis    时间: 2008-09-08 17:44
UDP 协议中 S 向 C发 和C向S发是一样的. 如果你要双向通讯..两端都要绑定一个固定端口用来接收数据.

(1) 怎样 取得UDP 发送时用的那个端口?

这个不是你自己填充的吗?
作者: anank    时间: 2008-09-08 17:47
原帖由 cookis 于 2008-9-8 17:44 发表
UDP 协议中 S 向 C发 和C向S发是一样的. 如果你要双向通讯..两端都要绑定一个固定端口用来接收数据.


这个不是你自己填充的吗?



不好意思,也许是我说的不清楚,嘿嘿。

sendto函数中:自己填的是对方的IP和对方的端口

怎么取得sendto发送时,自己所用的端口???

作者: @sky    时间: 2008-09-08 17:51
原帖由 anank 于 2008-9-8 17:29 发表
大家帮帮忙哦,因为这个地方代码看不下去了。。。
==================================
对了,还有一个问题,呵呵。

(1) 怎样 取得UDP 发送时用的那个端口?




UDP应该获取不到
作者: 5毛党党员    时间: 2008-09-08 17:54
UDP也可以bind吧?
我回去查一下,最近老露怯,不敢瞎说了
作者: cookis    时间: 2008-09-08 17:56
这个..依我的感觉 应该取不到..
不过你可以用这个试试.. getsockname
作者: @sky    时间: 2008-09-08 17:56
搂主的意图应该是没有BIND
作者: zszjxh    时间: 2008-09-08 18:07
原帖由 5毛党党员 于 2008-9-8 17:54 发表
UDP也可以bind吧?
我回去查一下,最近老露怯,不敢瞎说了

可以
作者: aoegiss    时间: 2008-09-08 20:11
UDP还可以connect呢
作者: xi2008wang    时间: 2008-09-08 20:32
flw老大又要问我的袜子在哪里了?
作者: system888net    时间: 2008-09-08 22:20
原帖由 anank 于 2008-9-8 17:19 发表
我学习网络编程还没多长时间,最近在看一个项目代码。感觉有些奇怪。

请看以下描述:(以下通信均用UDP来实现)
------------------------------------
C 为客户端, S为服务器端

S 绑定端口 10000,等 ...

sendto后,用getsockname可以取的到自己的端口.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2