2013-07-07 20 views
-1

我在IT工作,我正在学习网络安全管理。我想了解如何使用任何TCP/IP套接字API来设计和实现基本的客户端/服务器应用程序。我是否需要知道面向对象的编程语言,或者是否已经有多种用于TCP/IP编程的预制方法/函数?我需要做什么样的TCP/IP套接字编程必备知识?

+0

快速谷歌搜索“套接字编程”将回答你所需要的。对我来说,前几个结果包括Python和C以及实例和详细信息。 –

+0

我是否需要了解整个编程语言,还是只能学习一些与套接字编程相关的东西? – Sicypher

+0

从Beej的指导开始:http:// beej。us/guide/bgnet/ – selbie

回答

2

您需要对流式IO有很深的理解,就像文件IO一样。一旦设置好了,它就像许多用例的流IO一样。这包括流操作的概念以及系统调用的适当错误处理。

您需要了解文本或二进制协议,特别是何时停止阅读。对于某些协议,流在事件之间保持打开状态,但是如果您读取的数据包超出了数据包的末尾,则套接字的另一端可能不会向您发送任何内容,并且您的代码将被阻止,而这可能不是什么你要。能够注意什么时候应该停止阅读是非常重要的。有些协议使用标记,其他协议使用先前发送的长度。这是开始网络程序员遇到问题的常见原因。

对于二进制协议,您需要了解数字的字节排列,特别是整数。特别是大端与小端与“网络订单”。还需要了解如何从字节(特别是字节中的整数)构建更大的构造。如果你这样做不当,你的电话号码就会出错。

对于客户来说,这几乎是你所需要的。一旦你创建了套接字,你将对生成的套接字执行流操作,发送和接收字节和信息块。完成后,您将关闭套接字。除非协议指定,否则不应该依赖服务器关闭其套接字来指示它已完成。确保你在退出时清理你的资源。

如果您希望创建一个服务器并一次处理多个请求,则需要知道线程,分叉或异步IO以同时处理多个请求。之后,它变得非常像客户端,除了初始创建侦听套接字有点不同之外。

网络编程确实存在细微差别和复杂性,但对于您的基本连接,大部分内容都可以忽略。

脚本语言,Java和.NET使得网络编程比C更容易。C暴露原始套接字并将所有细节,但例行操作留给您。从脚本语言开始,您很可能会获得更多的成功。我无法与任何使网络编程更容易的C或C++库联系。我相信他们存在,我不能引用任何。

您还需要耐心来处理最初的挫折感,HURRAY感!当它最终奏效时,还有一张舒适的椅子,当你走时,最后坐下来“啧啧,现在不那么糟糕了,这很整齐”,然后和平地反思接下来的事情。

最后,正如我一直建议的,不要CUT和PASTE示例代码。无论你发现什么,输入它并尝试理解你输入的每一行。你将更好地理解它如何工作,而不仅仅是你下载并观看它。

+0

谢谢您的详尽解答 – Sicypher