我在IT部门工作,我正在学习网络安全管理。我想学习如何使用任何TCP / IP套接字API来设计和实现基本的客户端/服务器应用程序。我是否需要了解面向对象的编程语言,或者是否已经有各种用于TCP / IP编程的预制方法/函数?
答案 0 :(得分:2)
您需要对流IO有充分的了解,就像文件IO一样。一旦设置完成,它实际上就像许多用例的流IO一样。这包括流操作的概念,以及系统调用的正确错误处理。
您需要了解文本或二进制协议,特别是何时停止阅读。对于某些协议,流在事件之间保持打开状态,但是如果读取超出数据包的末尾,则套接字的另一端可能没有向您发送任何内容,并且您的代码将阻塞,这可能不是什么你要。能够记下何时应该停止阅读非常重要。有些协议使用标记,其他协议使用先前发送的长度。这是初学网络程序员遇到问题的常见原因。
对于二进制协议,您需要了解数字的字节排列,尤其是整数。特别是big-endian vs little-endian vs“network order”。还需要了解如何从字节构建更大的构造(再次,特别是从字节开始的整数)。如果你这样做不当,你的数字将是非常错误的。
对于客户来说,这几乎就是您所需要的。创建套接字后,您将对生成的套接字执行流操作,发送和接收字节和信息块。完成后,您将关闭套接字。除非协议指定,否则您不应该依赖服务器来关闭其套接字以指示它已完成。确保在退出时清理资源。
如果您希望一次创建服务器并处理多个请求,则需要了解线程,分叉或异步IO,以便同时处理多个请求。之后它变得很像客户端,除了初始创建的侦听套接字有点不同。
网络编程肯定存在细微差别和复杂性,但对于基本连接,大部分内容都可以忽略不计。
脚本语言,Java和.NET使网络编程变得比C更容易.C公开原始套接字并将所有细节但常规操作留给您。从脚本语言开始,您很可能会取得更大的成功。我不能说任何使网络编程更容易的C或C ++库。我确定它们存在,我不能引用它。
你还需要耐心来应对最初的挫折感,一种感觉!当它最终起作用的时候,还有一把舒适的椅子,当你走“Gee,现在那不是那么糟糕,这很漂亮”的时候坐在最后,然后和平地反思下一步是什么。
最后,正如我一直建议的那样,不要CUT和PASTE示例代码。无论你发现什么,输入它并尝试在输入时理解每一行。你将更好地掌握它的工作方式,而不是只是下载一些东西并观察它。