网络编程基础知识,需要帮助了解addrinfo/sockaddr_instructs的用法等

network programming basics, need help to understand addrinfo / sockaddr_in structs usage etc

本文关键字:sockaddr instructs 用法 addrinfo 基础知识 了解 帮助 网络编程      更新时间:2023-10-16

我开始学习C/C++网络编程,但一开始就停滞不前。我不太懂编程,但我了解C库、指针、结构等基本知识。我找不到与addrinfo/sockaddr_instructs相关的一些细节的详细信息。大量类似的结构令人讨厌,在线教程也很混乱。作为附加信息,我可以告诉您,我正在使用visual c++2010 express在windows上编程。我不知道我已经知道的信息是否正确。我认为它是这样工作的:

  1. sockaddr_in不再需要在任何地方手动创建和填充,因为函数"getaddrinfo"为我做了这件事,使用我在addrinfo中手动定义的信息,所以addrinfo是替换所有sockadd_in的东西
  2. HOSTENT结构似乎毫无用处,因为它被用于"gethostbyname"函数,并且由于"getaddrinfo"而被弃用

现在有一些问题:

"addrinfo"的引入如何改变常用函数的用法?现在有没有函数将addrinfo而不是sockaddr_in等其他参数作为其中的一部分?

似乎没有addrinfo的老式编程对初学者更友好,我想我现在只想使用sockaddr_in,因为我只想学习并制作简单的东西,这是个好主意吗?

请告诉我我的理解是否正确,并在可能的情况下回答我的问题,欢迎评论或解释。

编辑由于我没有得到解释我不理解的事情的直接答案,我一直在努力弄清楚它是如何工作的,我可能对这些事情有了更多的了解。

我现在最想知道的是HOSTENT结构的角色,在"gethostbyname"被弃用之后,因为"getaddrinfo"函数使它变得无用。我想知道细节,因为我想知道我在代码的每一部分都在做什么。

很遗憾,我不会回答您的问题,但是,我完全建议您阅读《Beej指南》,这是一个很好的参考资料,可以轻松开始:http://beej.us/guide/bgnet/

Berkeley Socket API已经30岁了(1983年出生)。因此,这里充满了许多崎岖不平的地方。Windows套接字API是一个多迭代的"bsd-ish"。或者,换言之,你正在从一个兔子洞开始,你可能不需要

如果你真的想了解API的演变,你实际上必须转向书籍——很可能是Steven的《Unix网络编程》,然后阅读有关WinSock移植的材料。但没有一个确切的消息来源,因为Windows的开发不是透明的,而且在过去10年左右的时间里,微软在让开发人员充分了解情况方面一直参差不齐(这就是一个很好的例子)。

但是,如果您真正想做的是了解在网络中移动数据包的实用性,而不是所涉及的结构的细节,那么您可能需要从稍微更高级别的API开始,如"libevent"(不幸的是,非常类似C)或"ZeroMQ"或"AMQP"(rabbitmq或Apacheqpid)。

好吧,我不确定你在寻找答案。因此,我将尝试采取一般建议路线。去年我完成了一个项目,我走上了winsock的道路,虽然我确信我发现了很多新的方法,但我喜欢winsock/sockaddr_in的东西(尽管我在编程的任何方面都不是大师)。我基本上是从一个简单的服务器/客户端对开始的,它允许两个人通过特定网络聊天。我发现sockaddr_in结构足够直观,可以使用。如果你想在较小的规模上开始,你可以通过将客户端端口设置为环回IP,让服务器/客户端在一台机器上本地,并让你的客户端连接到这个套接字(通过线程从同一应用程序中连接,或者为你的客户端和服务器提供单独的应用程序)。只需让你的服务器监听连接并发送一个简单的"成功"字符串或其他什么。这些想法大多来自我在youtube上找到的一个家伙(我知道这很震惊!)这里有一个链接。希望这能有所帮助。快乐编码!