-1

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

4

1 回答 1

2

您需要对流 IO 有一个扎实的了解,就像文件 IO 一样。一旦设置好,它实际上就像许多用例的流 IO。这包括流操作的概念,以及系统调用的正确错误处理。

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

对于二进制协议,您需要了解数字的字节排列,尤其是整数。特别是大端与小端与“网络顺序”。还需要了解如何从字节构建更大的构造(同样,值得注意的是,从字节构建整数)。如果你这样做不当,你的数字将是完全错误的。

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

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

网络编程肯定存在细微差别和复杂性,但对于您的基本连接,其中大部分可以忽略不计。

脚本语言、Java 和 .NET 使网络编程比 C 容易得多。C 公开原始套接字并将所有细节但常规的操作留给您。从脚本语言开始,您很可能会取得更大的成功。我不能谈论任何使网络编程更容易的 C 或 C++ 库。我确定它们存在,我不能引用任何。

您还需要耐心来应对最初的挫败感,HURRAH 感!当它最终起作用时,最后还有一把舒适的椅子可以坐回去,当你说“哎呀,现在还不错,这很整洁”时,然后平静地思考接下来会发生什么。

最后,正如我一直建议的那样,不要剪切和粘贴示例代码。无论您找到什么,输入它并在输入时尝试理解每一行。您将更好地掌握它是如何工作的,而不是仅仅下载一些东西并观看它运行。

于 2013-07-07T21:44:31.290 回答