社区
C语言
帖子详情
专门为难C高手,之如何从指定IP接受udp包
jamesontan
2008-10-30 09:11:00
unix下,我们知道可以从指定的IP和端口发送UDP包
请问那位高手有办法只从指定IP的指定port接受UDP包?呵呵
...全文
595
41
打赏
收藏
专门为难C高手,之如何从指定IP接受udp包
unix下,我们知道可以从指定的IP和端口发送UDP包 请问那位高手有办法只从指定IP的指定port接受UDP包?呵呵
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
41 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shihko
2009-06-03
打赏
举报
回复
这个问题我遇到过。
如果本机有多个IP,可以直接bind() UDP套接口到你想接收数据的IP和port。
这样当有UDP包发到别的地址的时候,自动丢弃。
不用connect。发送的时候才考虑connect以提高效率。
once_and_again
2008-11-10
打赏
举报
回复
结协包 的内容而已,
看upd的 报文格式.
jamesontan
2008-11-10
打赏
举报
回复
[Quote=引用 36 楼 Arthur_ 的回复:]
>对于不是指定的,不接受,而不是先读取,然后判断是否是指定IP,不是则丢弃的做法。
我觉得不太现实, 你为什么这么想呢?
>就像类似于TCP连接,固定套接字收发数据。
其实来一个报文tcp也要遍历一便所有的socket, 找到符合的socket(根据src ip/port dst ip/port)然后将报文放到一个缓冲队列中等你来recv。 换句话说就是先读在判断或丢弃或放到指定队列中。
>如何解决指从对端指定的IP和Port接受udp包
如…
[/Quote]
1、因为的的应用不能丢弃所有udp包,但是又需要分开处理不同的udp包,而且只能是同一个udp套接字接受,所以。。
2、这个是我题目的歧义,道歉,我的本意是如何解决从指定的对端IP而不是本地的指定IP接受UDP包,而且要求不能丢弃不是对端IP的UDP包
weidong0210
2008-11-10
打赏
举报
回复
up
jamesontan
2008-11-10
打赏
举报
回复
[Quote=引用 35 楼 lin_style 的回复:]
引用 32 楼 jamesontan 的回复:
引用 30 楼 bsky22 的回复:
楼主的说法不但有歧义,而且是错误的
首先,即使是TCP,也会丢弃不是本连接上的数据包,另外,数据报从远端传输过来,你只有接收和丢弃两种选择
我想你可能根本没写过tcp程序,你说的,首先,即使是TCP,也会丢弃不是本连接上的数据包,
想这种情况根本不会发生,不是本tcp连接上的字节流根本发不到本连接里来。
tcp是字节流,跟你说的数据包是有严格…
[/Quote]
呵呵,确实是为难大家了,这个问题,理论上是不能实现,但是实际上通过别的方法是可以解决的
至少我已经解决这个问题了,但是处理起来很复杂,需要非常规观念,呵呵
并向对该问题理解错误的同志道歉,是我的错,题目含义说的有歧义!
jamesontan
2008-11-09
打赏
举报
回复
[Quote=引用 29 楼 kestre1 的回复:]
《Unix Network Programing》中貌似有类似的部分,我的理解是获得UDP包之后解析其IP地址,然后过滤。
UDP无连接,感觉获得包之前过滤不太可能。
[/Quote]
你说的确实有道理,但是我就是想找高手解决下这样的问题
问题不难,就不叫为难高手了,呵呵。
jamesontan
2008-11-09
打赏
举报
回复
[Quote=引用 30 楼 bsky22 的回复:]
楼主的说法不但有歧义,而且是错误的
首先,即使是TCP,也会丢弃不是本连接上的数据包,另外,数据报从远端传输过来,你只有接收和丢弃两种选择
[/Quote]
我想你可能根本没写过tcp程序,你说的,首先,即使是TCP,也会丢弃不是本连接上的数据包,
想这种情况根本不会发生,不是本tcp连接上的字节流根本发不到本连接里来。
tcp是字节流,跟你说的数据包是有严格区别的。
jamesontan
2008-11-09
打赏
举报
回复
[Quote=引用 27 楼 AisaC 的回复:]
引用 25 楼 jamesontan 的回复:
引用 24 楼 hqin6 的回复:
检查,不是我需要的就丢了!
我的要求是不能丢,就象TCP那样,点对点的收,只收指定地址的UDP,别的地址不收
前面说不接收,这会儿又是不能丢弃,西马奇怪了..
楼主是
buf x -->TempBox
buf xx -->TempBox
A线程--:x port--x.x.x.x;
B线程--:xx port--xx.xx.xx.xx;
A从TempBox取出buf x
B取出buf xx
这个意思?
[/Quote]
我的题目是有歧义,但是后面更正了,请看仔细,看明白,再发表高见!呵呵
Arthur_
2008-11-09
打赏
举报
回复
>对于不是指定的,不接受,而不是先读取,然后判断是否是指定IP,不是则丢弃的做法。
我觉得不太现实, 你为什么这么想呢?
>就像类似于TCP连接,固定套接字收发数据。
其实来一个报文tcp也要遍历一便所有的socket, 找到符合的socket(根据src ip/port dst ip/port)然后将报文放到一个缓冲队列中等你来recv。 换句话说就是先读在判断或丢弃或放到指定队列中。
>如何解决指从对端指定的IP和Port接受udp包
如果ip只是本机 似乎你只要bind就可以(udp也可以bind)
如果你想指定任意的ip,你可以创建low-level socket,就是RAW SOCKET, 来抓取所有的数据。
然后类似tcp底层的实现过滤你需要的。
lin_style
2008-11-09
打赏
举报
回复
[Quote=引用 32 楼 jamesontan 的回复:]
引用 30 楼 bsky22 的回复:
楼主的说法不但有歧义,而且是错误的
首先,即使是TCP,也会丢弃不是本连接上的数据包,另外,数据报从远端传输过来,你只有接收和丢弃两种选择
我想你可能根本没写过tcp程序,你说的,首先,即使是TCP,也会丢弃不是本连接上的数据包,
想这种情况根本不会发生,不是本tcp连接上的字节流根本发不到本连接里来。
tcp是字节流,跟你说的数据包是有严格区别的。
[/Quote]
又见楼主。。
汗,希望楼主以后发帖子,换个题目,专门为难网络高手比较好。。
描述下楼主问题,即只接收指定IP的包。但是这里就有个歧义了,什么只接收指定IP的包?换句话说就是,有没对其他非指定IP的包进行判断? 还是主进程将包放到不同的队列里,由相应的线程处理?
19楼对这个伪问题已经进行很好的描述。
至于connect可以这样描述
假设有client A1,server B,A1 connect to B,双方进行数据交互,这时让另一台机器启动A2,并向A1发送数据,会提示一个Connection refused错误。也就是说假设有一台服务器A,他只想让指定的用户连接,那么A则去connect对方。
楼主挑个楼层把问题专门整理下。。。实在没看明白
freesky_zhang
2008-11-09
打赏
举报
回复
steve 的tcp/ip书中好像谈到只接受远端指定ip和指定port的方法。。。。不过我忘记是在udp还是tcp里面讲的
----上帝会原谅我的无知,因为我是他造的。----
bsky22
2008-11-06
打赏
举报
回复
楼主的说法不但有歧义,而且是错误的
首先,即使是TCP,也会丢弃不是本连接上的数据包,另外,数据报从远端传输过来,你只有接收和丢弃两种选择
jamesontan
2008-11-05
打赏
举报
回复
[Quote=引用 24 楼 hqin6 的回复:]
检查,不是我需要的就丢了!
[/Quote]
我的要求是不能丢,就象TCP那样,点对点的收,只收指定地址的UDP,别的地址不收
「已注销」
2008-11-05
打赏
举报
回复
[Quote=引用 21 楼 jamesontan 的回复:]
引用 19 楼 fetag 的回复:
楼主,说实话,我觉得你这种需求应该是没法实现的。考虑下面的情况:
假设一台server暴露在网上,那它一定有IP地址,有某些开放的port。另外假设有两个clients,分别为A和
B,server只想接收来自A的消息,而不想接收B的消息。但问题是,如果B知道server的IP和port,并且B和
server之间的物理传输和路由都没问题,那B就可以给server发消息过来,这个行为是B自己的行为,无论
server是否…
[/Quote]
19楼说的对,这是以太网的设计必然造成的结果,以太网本身的策略就是广播,接收方负责过滤不要的包.
如果你一定要做,就要考虑令牌网的拓扑.
因为,你在接受一个包之前,没法知道这个包你究竟想不想要,不是吗?
kestre1
2008-11-05
打赏
举报
回复
《Unix Network Programing》中貌似有类似的部分,我的理解是获得UDP包之后解析其IP地址,然后过滤。
UDP无连接,感觉获得包之前过滤不太可能。
Arthur_
2008-11-05
打赏
举报
回复
[Quote=引用楼主 jamesontan 的帖子:]
unix下,我们知道可以从指定的IP和端口发送UDP包
请问那位高手有办法只从指定IP的指定port接受UDP包?呵呵
[/Quote]
如果没有理解错的 你似乎可以在创建一个socket 并将其bind在某个端口上。
神马都能聊
2008-11-05
打赏
举报
回复
[Quote=引用 25 楼 jamesontan 的回复:]
引用 24 楼 hqin6 的回复:
检查,不是我需要的就丢了!
我的要求是不能丢,就象TCP那样,点对点的收,只收指定地址的UDP,别的地址不收
[/Quote]
前面说不接收,这会儿又是不能丢弃,西马奇怪了..
楼主是
buf x -->TempBox
buf xx -->TempBox
A线程--:x port--x.x.x.x;
B线程--:xx port--xx.xx.xx.xx;
A从TempBox取出buf x
B取出buf xx
这个意思?
jamesontan
2008-11-04
打赏
举报
回复
[Quote=引用 22 楼 luansxx 的回复:]
udp没有客户端,服务器的区别,两边都可以connect,当然两边要知道ip,并约定好port
[/Quote]
请高手提供一下具体代码?
太乙
2008-11-04
打赏
举报
回复
检查,不是我需要的就丢了!
jamesontan
2008-10-31
打赏
举报
回复
[Quote=引用 19 楼 fetag 的回复:]
楼主,说实话,我觉得你这种需求应该是没法实现的。考虑下面的情况:
假设一台server暴露在网上,那它一定有IP地址,有某些开放的port。另外假设有两个clients,分别为A和
B,server只想接收来自A的消息,而不想接收B的消息。但问题是,如果B知道server的IP和port,并且B和
server之间的物理传输和路由都没问题,那B就可以给server发消息过来,这个行为是B自己的行为,无论
server是否“同意”,它都会收到B发来…
[/Quote]
呵呵,你说的很有道理,不过任何难题或者科研题目,在解决之前,一般都觉得是不可能的,但是事实证明
后来大都解决了。我这么做的主要目的是想收到的udp包都不能丢弃,因为这些udp包可能都是有用的,只是需要不同的线程来处理。
或许有别的办法,有没有这种可能, server首先不管是谁发过来的UDP包,首先都把他收进一个buf,然后
线程根据指定IP到该buf读取,读出一段,就删除之,有没有这种可能的实现方法?
加载更多回复(21)
C语言面试题汇编
C.
UDP
;D.TCP;E.ID 22.属于网络层协议的是:( B C) A.TCP;B.
IP
;C.ICMP;D.X.25 23.Windows消息调度机制是:(C) A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈; 找错题: 25.请问...
c/c++笔试题
组播:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以
接受
到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器...
C/C++面试题大汇总
(转)C/C++面试题大汇总 . 最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。 发布之前先申明两...
C/C++面试题大集锦
(转)C/C++面试题大汇总 . 最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。 发布之前先申明两...
C/C++笔试题(很多)
组播:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以
接受
到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章