1

我开始学习 C/C++ 网络编程,但我一开始就卡住了。我在编程方面有点菜鸟,但我了解 C 库、指针、结构等基本知识。我找不到有关 addrinfo / sockaddr_in 结构的一些详细信息的很好解释的信息。类似结构的数量很烦人,在线教程也很混乱。作为附加信息,我可以告诉我我正在使用 Visual c++ 2010 express 在 Windows 上编程。我不知道我已经知道的信息是否正确。我认为它是这样工作的:

  1. sockaddr_in 不再需要在任何地方手动创建和填充,因为“getaddrinfo”函数为我完成了这项工作,使用我在 addrinfo 中手动定义的信息,所以 addrinfo 是替换所有 sockaddr_in 的东西。
  2. 似乎 HOSTENT 结构没用,因为它在“gethostbyname”函数中使用,并且由于“getaddrinfo”而被弃用

现在有几个问题:

引入“addrinfo”如何改变常用函数的使用 - 现在有没有任何函数采用其他参数,例如 addrinfo 而不是 sockaddr_in 作为它们的一部分?

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

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

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

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

4

3 回答 3

0

不幸的是,我不会回答你的问题,但是,我完全建议阅读 Beej 指南,这是一个很好的参考,可以让你以愉快的方式开始:http: //beej.us/guide/bgnet/

于 2013-08-11T17:27:24.010 回答
0

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

于 2013-08-11T20:33:05.457 回答
0

Berkeley Socket API 已有 30 年的历史(出生于 1983 年)。所以它充满了很多杂物。Windows Socket API 是一个多迭代的“bsd-ish”。或者,换一种说法,你是从一个你可能不需要的兔子洞开始的。

如果您真的想了解 API 的演变,您实际上将不得不求助于书籍 - 很可能是 Steven 的“Unix Network Programming”,然后阅读有关 WinSock 移植的材料。但是没有一个确定的来源,因为 Windows 的开发不是透明的,而且过去 10 年左右的时间里,微软在让他们的开发人员充分了解情况方面一直存在缺陷(这就是一个很好的例子)。

但是,如果您真正想要做的是了解在网络中移动数据包的实用性,而不是所涉及结构的细节,您可能希望从查看稍微更高级别的 API 开始,例如“ libevent ”(不幸的是,非常喜欢 C)或“ ZeroMQ ”或“AMQP”(rabbitmqApache qpid)。

于 2013-08-11T18:30:35.593 回答