带有 GUI 的基于 Winsock2 的 TCP 客户端(如何将 TCP 控制台应用程序与 GUI 结合使用)

Winsock2 based TCP client with GUI (how to combine TCP console application with GUI)

提问人:bongo 提问时间:11/9/2023 最后编辑:Remy Lebeaubongo 更新时间:11/9/2023 访问量:64

问:

我有一个使用 Winsock2 作为 TCP 客户端运行的控制台应用程序。此应用程序连接到定期提供测量数据的服务器,并且需要从我的客户端获取一些配置。这一切都是用 C 语言编程的,我使用 mingw64 编译器。

发送和接收是非阻塞的,即我不需要等待任何接收数据继续代码执行。这使我能够独立发送和接收数据,而不会在未收到数据时被阻止。

由于控制台应用程序对于接收到的数据的可视化效果并不好看,并且不提供发送配置集的按钮,因此我正在尝试添加一个 GUI。

因此,我按照 http://winprog.org/tutorial/ 来了解如何对 GUI 进行编程。

现在,作为下一步,我尝试将我的 TCP 通信包含在 Windows GUI 应用程序中,但这就是我失败的地方。

在 Windows 应用程序设置 GUI 窗口时,我添加了用于建立 TCP 连接的代码。

之后,原始 GUI 程序将永远在消息循环中转动。因此,我也将我的 TCP 接收代码放入此循环中,并认为它是永久执行的。但这种假设显然是错误的。 我没有从已建立的连接接收到任何数据。只要 GUI 上没有操作,消息循环似乎就在休眠,即只要我移动鼠标指针,整堆数据就会进来。

如何/在哪里放置应该永久执行的 C 代码,以便与 GUI 一起运行?

不幸的是,到目前为止,我还没有找到一个合适的例子,简单到足以让我理解。

用户界面 winapi 控制台-应用程序 winsock2

评论

2赞 Remy Lebeau 11/9/2023
我要么 1) 将套接字代码移动到单独的工作线程中,要么 2) 重写套接字代码以利用 WSAAsyncSelect(),以便它集成到您的 UI 消息循环中。

答: 暂无答案