【发布时间】:2010-10-08 03:59:11
【问题描述】:
新人想学习win32中的socket编程。我知道一点 MFC,但这不是一个好的开始,因为它只是隐藏了程序员的内部细节。
【问题讨论】:
标签: c++ windows sockets winsock
新人想学习win32中的socket编程。我知道一点 MFC,但这不是一个好的开始,因为它只是隐藏了程序员的内部细节。
【问题讨论】:
标签: c++ windows sockets winsock
使用 winsock 函数 (Winsock2.h)。
【讨论】:
两种选择:
第一个选项意味着编写“样板”代码,因此最好使用 3rd 方库。
串行端口编程最常见的“启动问题”是与设备建立通信链接。您需要正确设置端口名称、波特率、奇偶校验等(通常由设备制造商提供)。
那么设备也会有一个“命令集”。例如,如果您发送“?”到设备,它将返回制造商名称等设备信息(“?”命令是一个示例,它不是标准 - 命令集因设备而异)。
所有的串行通信都是这样工作的: - 你写一个命令到串口 - 轮询读取缓冲区以获取来自设备的响应
据我所知,C++ 或 MFC 中没有内置的串行端口通信类,但有很多用于此目的的 3rd 方库。
【讨论】:
你说得对,MFC 会掩盖一些细节,我不知道他们为什么决定包装它。
有很多关于 WinSock 编程的好书和教程。这是一个;
【讨论】:
答案是使用win32 socket API。
在 MSDN 中有关于这个 API 的信息。
它(所谓的“Winsock”API)类似于(基于)Unix/Posix API,因此与 MSDN 一样,许多关于在 Unix 上使用套接字的文献(书籍)也是相关的。
谷歌搜索会找到你的代码示例,大概。
您会想了解一些关于网络的知识:例如,“IP 地址”和“端口”是什么。
您需要选择一种协议(UDP 或 TCP)。
Win32 的一个不同之处在于,当您有一个连接的套接字时,您可以使用 ReadFile 和 WriteFile,这意味着您可以使用与 ReadFile 和 WriteFile 关联的重叠 I/O 选项。
【讨论】:
Beej 的指南是一个非常常见的起点。自从我开始使用这些东西已经有几年了,但是 iirc,该指南使用 Berkeley 套接字并在适当的地方指出了与 winsock 的区别。
【讨论】:
我完全同意 ChrisW 并赞扬你传递 MFC。
请参阅MSDN Winsock Reference 了解大量重要的 WinSock 信息。
另外,虽然它可能太大而无法学习,但我有一个我认为非常好的Socket Server Class - 如果你觉得它有用,请告诉我。
【讨论】:
一个小提示是(假设您使用 Visual Studio 和 Winsocket 库)您需要手动链接 WS2_32.Lib。我发现这个小步骤是很多初学者错过的,因此会出现一些奇怪的错误(在旁观者看来很奇怪)。 http://social.microsoft.com/Forums/en-US/vcgeneral/thread/cfefa4a5-1f1a-4987-8bc7-f3197cb5826c
还有;恕我直言,您不应该使用 MFC。 google-net 上有很多很棒的 winsocket 编程指南 :)
祝你好运
【讨论】: