我在IT工作,我正在学习网络安全管理。我想了解如何使用任何TCP/IP套接字API来设计和实现基本的客户端/服务器应用程序。我是否需要知道面向对象的编程语言,或者是否已经有多种用于TCP/IP编程的预制方法/函数?我需要做什么样的TCP/IP套接字编程必备知识?
回答
您需要对流式IO有很深的理解,就像文件IO一样。一旦设置好了,它就像许多用例的流IO一样。这包括流操作的概念以及系统调用的适当错误处理。
您需要了解文本或二进制协议,特别是何时停止阅读。对于某些协议,流在事件之间保持打开状态,但是如果您读取的数据包超出了数据包的末尾,则套接字的另一端可能不会向您发送任何内容,并且您的代码将被阻止,而这可能不是什么你要。能够注意什么时候应该停止阅读是非常重要的。有些协议使用标记,其他协议使用先前发送的长度。这是开始网络程序员遇到问题的常见原因。
对于二进制协议,您需要了解数字的字节排列,特别是整数。特别是大端与小端与“网络订单”。还需要了解如何从字节(特别是字节中的整数)构建更大的构造。如果你这样做不当,你的电话号码就会出错。
对于客户来说,这几乎是你所需要的。一旦你创建了套接字,你将对生成的套接字执行流操作,发送和接收字节和信息块。完成后,您将关闭套接字。除非协议指定,否则不应该依赖服务器关闭其套接字来指示它已完成。确保你在退出时清理你的资源。
如果您希望创建一个服务器并一次处理多个请求,则需要知道线程,分叉或异步IO以同时处理多个请求。之后,它变得非常像客户端,除了初始创建侦听套接字有点不同之外。
网络编程确实存在细微差别和复杂性,但对于您的基本连接,大部分内容都可以忽略。
脚本语言,Java和.NET使得网络编程比C更容易。C暴露原始套接字并将所有细节,但例行操作留给您。从脚本语言开始,您很可能会获得更多的成功。我无法与任何使网络编程更容易的C或C++库联系。我相信他们存在,我不能引用任何。
您还需要耐心来处理最初的挫折感,HURRAY感!当它最终奏效时,还有一张舒适的椅子,当你走时,最后坐下来“啧啧,现在不那么糟糕了,这很整齐”,然后和平地反思接下来的事情。
最后,正如我一直建议的,不要CUT和PASTE示例代码。无论你发现什么,输入它并尝试理解你输入的每一行。你将更好地理解它如何工作,而不仅仅是你下载并观看它。
谢谢您的详尽解答 – Sicypher
- 1. Python套接字编程 - 需要在监听连接时做点什么
- 2. 我需要什么样的MySQL连接?
- 3. 我需要什么样的连接?
- 4. 什么是套接字编程中的RAW套接字
- 5. 我需要准备什么样的“项目管理”文件来为新的Web应用程序做准备
- 6. 我需要知道什么时候编辑完文本字段
- 7. 为什么我们需要网络套接字?
- 8. 我需要什么,我做错了
- 9. 什么我需要知道做的asp.net流
- 10. 需要做些什么来编译?
- 11. 我不知道要做什么公式
- 12. 我们为什么要这样做。
- 13. Nightly Builds:我为什么要这样做?
- 14. 我需要安排我的知识
- 15. 我需要什么样的查询?
- 16. 我需要什么样的Http代理?
- 17. 我需要什么样的关系
- 18. 我需要什么样的Java布局?
- 19. 我需要什么样的算法?
- 20. 我需要什么样的JOIN语句?
- 21. 我需要知道这行代码在django中做了什么
- 22. 我需要在Matlab中编程做环
- 23. 如何做ssl套接字编程
- 24. 号码:COMMANDBUTTON做什么,我需要
- 25. 我现在需要做什么?
- 26. 请问jQuery $ .getJSON()做我需要什么?
- 27. python套接字与EINTR做什么?
- 28. 要做这样的事情需要什么语言?
- 29. Subversion - 我需要备份什么?
- 30. 我需要做些什么来保持与Azure DB的连接?
快速谷歌搜索“套接字编程”将回答你所需要的。对我来说,前几个结果包括Python和C以及实例和详细信息。 –
我是否需要了解整个编程语言,还是只能学习一些与套接字编程相关的东西? – Sicypher
从Beej的指导开始:http:// beej。us/guide/bgnet/ – selbie