【问题标题】:C++ websockets server/client crossplatform linux/windowsC++ websockets 服务器/客户端跨平台 linux/windows
【发布时间】:2016-07-30 08:20:31
【问题描述】:

我正在尝试使用 Websocket 客户端/服务器实现示例代码:

  • 适用于 windows 和 linux
  • 支持多个客户端
  • 没有额外的依赖,纯C/C++代码好用

例如,实现像聊天室这样可以接受许多用户的东西,将是我了解 Websockets 如何工作并在我的项目中使用它们的一个很好的基础。

我正在查看this website,我看到了这个 C++ 中的 Websocket 示例。

我正在使用使用 MinGW 编译器的 Clion IDE,并且这些头文件不存在:

#include <netinet/in.h>
#include <netdb.h>

自动代码完成建议这些标题:

#include <winsock.h>
or    
#include <winsock2.h>

即使我的 IDE 上没有看到带有这些标头的错误,但当我运行代码时,我会收到链接错误:

CMakeFiles\server_client.dir/objects.a(server.cpp.obj): In function `main':
C:/Users/Shiro/ClionProjects/server_client/server.cpp:44: undefined reference to `listen@8'
C:/Users/Shiro/ClionProjects/server_client/server.cpp:58: undefined reference to `select@20'
C:/Users/Shiro/ClionProjects/server_client/server.cpp:66: undefined reference to `__WSAFDIsSet@8'
collect2.exe: error: ld returned 1 exit status

顺便说一句,这段代码在 C++ 中实现 Websocket 客户端/服务器是否更好?我希望它可以在 Windows 和 linux 上运行,并且没有外部依赖项。只是纯 C/C++。我看到的几个库(如libwebsockets)对我来说太混乱和过于复杂,而且它们缺乏任何文档或任何示例。我没有看懂一行代码。其他语言(如 Java 或 C#)的 Websocket 更直接。有人可以指出我正确的方向吗?

【问题讨论】:

    标签: c++ websocket


    【解决方案1】:

    Windows 套接字 API 与 POSIX 的 API 非常相似,但有一些区别,正如 this MSDN article 中所解释的那样,并且在使用此 API 之前您必须调用 WSAStartup()。

    关于标题取winsock2.h。但是你不应该忘记在你的项目中包含套接字库(makefile/project 参数或者#pragma comment(lib, "Ws2_32.lib")。

    如果你想要可移植的代码,你可以考虑boost::asio

    【讨论】:

    • 获取undefined reference to WSAStartup。 "Ws2_32.lib" 应该是什么?我需要放一条路径吗?
    • 它应该引用system32中ws2_32.dll的dll存根(不需要额外的路径)。然而,到 lib 应该在给链接器的路径之一中(例如 LIB 环境变量)。
    • 我不明白为什么我不断收到这些undefined reference 错误
    • 我在使用 Clion 安装 boost 时遇到问题。如果你能帮助我,我已经在这里发布了question
    • 如果你能提供帮助,现在问题已经缩小到这个question。我不明白如何链接 ws2_32 library 。 #pragma 是 MSVC 唯一的关键字
    猜你喜欢
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多