Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
C++ 网络编程基础知识,需要帮助了解addrinfo/sockaddr_在结构中的用法等_C++_Windows_Sockets - Fatal编程技术网

C++ 网络编程基础知识,需要帮助了解addrinfo/sockaddr_在结构中的用法等

C++ 网络编程基础知识,需要帮助了解addrinfo/sockaddr_在结构中的用法等,c++,windows,sockets,C++,Windows,Sockets,我开始学习C/C++网络编程,但我还停留在一开始。我有点不懂编程,但我了解一些基本的东西,如C库、指针、结构等。我在结构中找不到关于addrinfo/sockaddr_的详细信息。类似结构的数量很烦人,在线教程也很混乱。作为附加信息,我可以告诉我,我在Windows上编程,使用Visual C++ 2010 Express。我不知道我已经知道的信息是否正确。我认为是这样的: 不再需要在任何地方手动创建和填充sockaddr_,因为getaddrinfo函数使用我在addrinfo中手动定义的信息

我开始学习C/C++网络编程,但我还停留在一开始。我有点不懂编程,但我了解一些基本的东西,如C库、指针、结构等。我在结构中找不到关于addrinfo/sockaddr_的详细信息。类似结构的数量很烦人,在线教程也很混乱。作为附加信息,我可以告诉我,我在Windows上编程,使用Visual C++ 2010 Express。我不知道我已经知道的信息是否正确。我认为是这样的:

不再需要在任何地方手动创建和填充sockaddr_,因为getaddrinfo函数使用我在addrinfo中手动定义的信息为我完成了这项工作,因此addrinfo是替换所有sockaddr_的工具。 似乎HOSTENT结构是无用的,因为它在gethostbyname函数中使用,并且由于getaddrinfo而被弃用 现在有一些问题:

addrinfo的引入如何改变常用函数的用法?现在是否有函数将另一个参数(如addrinfo)而不是sockaddr_作为它们的一部分

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

请告诉我我的理解是否正确,如果可能,请回答我的问题,欢迎评论或解释

编辑 因为我没有得到直接的答案来解释我不理解的事情,所以我一直试图弄清楚它是如何工作的,我可能对这些事情了解得更多一些


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

很遗憾,我不打算回答您的问题,但是,我完全建议您阅读Beej的指南,这是一本非常好的入门指南:

伯克利Socket API诞生于1983年,已经30岁了。因此,它充满了大量的原油。Windows套接字API是一个多次迭代的bsd ish。或者,换一种说法,你开始进入一个你可能不需要的兔子洞

如果您真的想了解API的发展,您实际上必须阅读一些书籍——很可能是Steven的Unix网络编程,然后阅读有关WinSock移植的材料。但是没有一个确定的来源,因为Windows的开发不是透明的,在过去10年左右的时间里,微软在让开发人员充分了解情况方面做得不好,这就是一个很好的例子


但是,如果您真正想做的是了解在网络中移动数据包的实用性,而不是所涉及的结构的细节,那么您可能希望从稍微高一点的API开始,例如,很遗憾,非常类似C的or或AMQP or。

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

我已经读过了,Beej的指南很旧,它鼓励使用winsock.h什么是现在的古代库,并且没有很好地描述这些结构。我不能找到详细的信息,而且很难在页眉使用变化中混乱。如果你想在这个细节上学习,你可能想要。这不是我认为的大细节,我认为C++编程人员知道这些结构的用法。我还希望确认我收集的信息是正确的。使用getaddrinfo的人会知道答案的。我不是在寻找API的演变,但我很难理解这些基础知识,因为这很复杂,很难理解,因为不断变化的内容和使用过时的结构作为其一部分的新结构,而且源代码看起来不太符合逻辑,更像是一团糟,而不是展示它是如何工作的,所以我无法理解
我自己回答,我甚至不知道如何开始编码来测试自己。另外,我更喜欢从winsock开始,而不是从备选方案开始。谢谢,您为我提供了一个很好的示例,并对其进行了详细的描述。我要寻找的答案是关于替换中sockaddr_的struct addrinfo引起的更改的详细信息。Beej的指南是唯一提到这些结构的共同点的指南,很难找到详细的信息来理解它们之间的区别。我只在文章中使用了sockaddr_,所以在这篇文章中有一点保留!!乍一看,addrinfo结构似乎比sockaddr_结构中的数据成员多几个,包括sockaddr本身的一个实例。还描述了与之相关的套接字的更多信息,例如TCP或UDP或RAW等。也许如果您浏览一些MSDN文档或某个隐藏在某处的论坛,您会发现gold,并找到一位对这两个问题进行最佳案例分析的人。在我看来,我会从sockaddr_In方法开始,学习基础知识。希望这有帮助!