【问题标题】:How to write socket communication program using win32如何使用win32编写socket通信程序
【发布时间】:2010-10-08 03:59:11
【问题描述】:

新人想学习win32中的socket编程。我知道一点 MFC,但这不是一个好的开始,因为它只是隐藏了程序员的内部细节。

【问题讨论】:

    标签: c++ windows sockets winsock


    【解决方案1】:

    使用 winsock 函数 (Winsock2.h)。

    【讨论】:

      【解决方案2】:

      两种选择:

      1. 编写与串行端口通信的基于文件流的代码。
      2. 使用 C++ 库进行串行端口通信(谷歌)

      第一个选项意味着编写“样板”代码,因此最好使用 3rd 方库。

      串行端口编程最常见的“启动问题”是与设备建立通信链接。您需要正确设置端口名称、波特率、奇偶校验等(通常由设备制造商提供)。

      那么设备也会有一个“命令集”。例如,如果您发送“?”到设备,它将返回制造商名称等设备信息(“?”命令是一个示例,它不是标准 - 命令集因设备而异)。

      所有的串行通信都是这样工作的: - 你写一个命令到串口 - 轮询读取缓冲区以获取来自设备的响应

      据我所知,C++ 或 MFC 中没有内置的串行端口通信类,但有很多用于此目的的 3rd 方库。

      【讨论】:

      • OP 询问的是套接字,而不是串行端口。
      • 为了防御 Sesh,也可以使用 MFC 套接字进行串行通信。
      【解决方案3】:

      你说得对,MFC 会掩盖一些细节,我不知道他们为什么决定包装它。

      有很多关于 WinSock 编程的好书和教程。这是一个;

      http://www.codeproject.com/KB/IP/winsockintro01.aspx

      【讨论】:

        【解决方案4】:

        答案是使用win32 socket API。

        在 MSDN 中有关于这个 API 的信息。

        它(所谓的“Winsock”API)类似于(基于)Unix/Posix API,因此与 MSDN 一样,许多关于在 Unix 上使用套接字的文献(书籍)也是相关的。

        谷歌搜索会找到你的代码示例,大概。

        您会想了解一些关于网络的知识:例如,“IP 地址”和“端口”是什么。

        您需要选择一种协议(UDP 或 TCP)。

        Win32 的一个不同之处在于,当您有一个连接的套接字时,您可以使用 ReadFile 和 WriteFile,这意味着您可以使用与 ReadFile 和 WriteFile 关联的重叠 I/O 选项。

        【讨论】:

          【解决方案5】:

          http://beej.us/guide/bgnet/

          Beej 的指南是一个非常常见的起点。自从我开始使用这些东西已经有几年了,但是 iirc,该指南使用 Berkeley 套接字并在适当的地方指出了与 winsock 的区别。

          【讨论】:

            【解决方案6】:

            我完全同意 ChrisW 并赞扬你传递 MFC。

            请参阅MSDN Winsock Reference 了解大量重要的 WinSock 信息。

            另外,虽然它可能太大而无法学习,但我有一个我认为非常好的Socket Server Class - 如果你觉得它有用,请告诉我。

            【讨论】:

              【解决方案7】:

              一个小提示是(假设您使用 Visual Studio 和 Winsocket 库)您需要手动链接 WS2_32.Lib。我发现这个小步骤是很多初学者错过的,因此会出现一些奇怪的错误(在旁观者看来很奇怪)。 http://social.microsoft.com/Forums/en-US/vcgeneral/thread/cfefa4a5-1f1a-4987-8bc7-f3197cb5826c

              还有;恕我直言,您不应该使用 MFC。 google-net 上有很多很棒的 winsocket 编程指南 :)

              祝你好运

              【讨论】:

                【解决方案8】:
                猜你喜欢
                • 1970-01-01
                • 2013-10-24
                • 1970-01-01
                • 1970-01-01
                • 2016-02-29
                • 2014-04-20
                • 2012-05-15
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多