游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2019|回复: 4

学网络编程有几点疑问,希望各位能帮我解答.

[复制链接]

10

主题

23

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2008-4-1 09:49:00 | 显示全部楼层 |阅读模式
学网络编程已有一段时间,我有几点疑问,希望各位能够解答:
1.TCP/IP是阻塞协议,UDP是非阻塞协议,如果在UDP协议中加入验证数据处理,那是不是等于TCP/IP协议,如果是这样,那使用数据验证处理的UDP和TCP/IP有何区别?
2.在网络编程中,有人说可以用两套协议,比如:“聊天”可以用UDP,“走路”可以用TCP/IP,一个系统可以使用两套协议吗?还是我理解错“两套协议”,其实是指UDP,只是“走路”用了数据验证处理,而“聊天”没有?
3.完成端口只能在windows系统上运行,而UDP可以跨平台,是这样吗?完成端口也属于非阻塞,那和UDP有什么区别?
4.我看过一些网络编程代码,是TCP/IP + 完成端口,这种组合是叫TCP/IP非阻塞协议吗?
有没有UDP + 完成端口的组合,如果有,那上述所说的这两种组合有什么区别?

希望各位能帮我解答这些疑问谢谢
[em10] [em10] [em10] [em10] [em10] [em10]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-4-1 16:05:00 | 显示全部楼层

Re:学网络编程有几点疑问,希望各位能帮我解答.

一句话两句话真不好说清楚,他们根本差别是一个建立连接,一个不需要建立连接。
跟阻不阻塞没关系。
tcp内置有重发机制,udp没有。tcp按正常流次序发送,udp包乱序发送
另外,谁说tcp就是一定是阻塞的?

建议楼主再去看看有关的书籍吧。

10

主题

23

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2008-4-1 19:44:00 | 显示全部楼层

Re: 学网络编程有几点疑问,希望各位能帮我解答.

谢谢解答,学了一段时间.感觉上乱乱的,虚心讨教了. [em10] [em10] [em10]

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2008-4-1 19:58:00 | 显示全部楼层

Re:学网络编程有几点疑问,希望各位能帮我解答.

1、它们之间不是阻塞不阻塞的区别,而是 TCP/IP基于连接,保证数据有序不丢包;UDP是不建立连接,以数据报为单位发送,乱序可丢包。确实有人使用UDP做出有序不丢包的应用,不过私以为除了可以灵活选择具体数据是否可丢是否无序外,吃力不讨好,完全抛弃了UDP的优点。

2、并不是只能建立一个socket,可以同时建立多个,并且有的是TCP/IP,有的是UDP,用作不同的用途。

3、完成端口IOCompletionPort,是一种用IO技术,socket这种IO操作尤其适用而已,你读写文件一样可以用它。所以IOCP + UDP或者TCP/IP都是完全可行的。它强调的是把IO操作投递出去后,此线程不阻塞,待IO操作Complete后,自动激活某个Get此Port而阻塞等待的工作线程处理。

PS:IOCP + ThreadPool 是目前windows平台上异步IO操作的最佳解决方案,可使用有限个thread管理操作成千上万个IO操作。

10

主题

23

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2008-4-1 22:43:00 | 显示全部楼层

Re: 学网络编程有几点疑问,希望各位能帮我解答.

感觉IOCP + UDP有点重复的样子,IOCP和UDP本身都是异步的.

tonykee,你说:"谁说tcp就是一定是阻塞的?"[em10] [em10] [em10]等待用户回应,才能返回,这段时间是阻塞状态,搞不懂在TCP/IP下如何实现非阻塞,我的问题中有提到用TCP/IP + IOCP实现,[em10] 算不算是TCP/IP非阻塞?


谢谢,头脑稍微有点清晰了.  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 17:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表