Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api 做TCP/IP套接字编程需要什么样的先决知识?_Api_Sockets_Unix_Client Server_Tcp Ip - Fatal编程技术网

Api 做TCP/IP套接字编程需要什么样的先决知识?

Api 做TCP/IP套接字编程需要什么样的先决知识?,api,sockets,unix,client-server,tcp-ip,Api,Sockets,Unix,Client Server,Tcp Ip,我在IT部门工作,正在学习网络安全管理。我想学习如何使用任何TCP/IP套接字API来设计和实现基本的客户机/服务器应用程序。我是否需要了解面向对象编程语言,或者TCP/IP编程已经有各种各样的预制方法/函数?您需要对流IO有扎实的理解,就像文件IO一样。一旦事情建立起来,对于许多用例来说,它实际上就像流IO一样。这包括流操作的概念,以及系统调用的正确错误处理 您需要了解文本或二进制协议,尤其是何时停止阅读。对于某些协议,流从一个事件到另一个事件保持打开状态,但是如果您读取的数据超过了数据包的末

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

您需要对流IO有扎实的理解,就像文件IO一样。一旦事情建立起来,对于许多用例来说,它实际上就像流IO一样。这包括流操作的概念,以及系统调用的正确错误处理

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

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

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

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

网络编程当然有细微差别和复杂之处,但对于您的基本连接性来说,其中大部分可以忽略

脚本语言、Java和.NET使网络编程比C容易得多。C公开了原始套接字,并将所有细节和例行操作留给您。从脚本语言开始,您很可能会获得更大的成功。我不能用任何C或C++库来说明网络编程更容易。我肯定他们存在,我不能引用任何

你还需要耐心来处理最初的挫折,一种欢呼的感觉!当它最终起作用时,一张舒适的椅子坐在最后,当你说“哎呀,现在还不错,这真是太好了”,然后平静地思考下一步会发生什么


最后,正如我一直建议的,不要剪切和粘贴示例代码。无论你会发现什么,都要输入,并在输入的过程中尽量理解每一行。与下载某个内容并观看其运行相比,您将更好地了解它的工作原理。

在谷歌上快速搜索“socket编程”将满足您的需要。为我展示的前几个结果包括Python和C以及示例和详细信息。我需要了解一门完整的编程语言,还是只需要学习一些与套接字编程相关的知识就可以了?从Beej的指南开始:谢谢你的全面回答