感谢大神提供这么厉害的算法,我给 KCP 封装了一个简单的 C++ 接口,可否携带分发 ikcp.c?

ua4mk5z4  于 2022-10-25  发布在  其他
关注(0)|答案(7)|浏览(192)

没有其它的特性,只是简单地基于 UDP 封装了一个类似于 TCP 的接口,很简单的工作,见笑了:

https://github.com/hgoldfish/qtnetworkng/blob/master/include/kcp.h

使用方式大概是这样:

//client.cpp

# include "qtnetworkng.h"

void main()
{
    KcpSocket s;
    if (s.connect("remotehost", 8000)) {
        s.sendall("hello!");
    }
}

//server.cpp
void main() {
    KcpSocket s;
    s.bind(8000);
    s.listen(50);
    while (true) {
        QSharedPointer<KcpSocket> req = s.accept();
        if (!req) break;
        Coroutine::spawn([req] {
            qDebug() << req->recvall();
        });
    }
}

请问一下作者,QtNetworkNg 这个网络库采用的是 LGPL 协议,能够直接嵌入 kcp 吗?我把 kcp 的 LICENSE 文件已经带上。

dfddblmv

dfddblmv1#

C++代码放入.c文件?这操作。。。。。

ao218c7q

ao218c7q2#

C++代码放入.c文件?这操作。。。。。

C++ 原本就能够调用 C 语言接口的啊,比如 C++ 调用 openssl 和 ffmpeg 也很常见。kcp 没有独立的 makefile 制作成 .so,貌似除了放到工程里面编译,也没其它的好办法了。不过我不太了解是否 KCP 的授权协议允许这么干,所以过来问一下。

9rygscc1

9rygscc13#

C++能调用C,没错。但请你先弄明白 .c, .cpp的区别。你在.c里面写一个class,你让其他的C编译器怎么工作?

von4xj4u

von4xj4u4#

C++能调用C,没错。但请你先弄明白 .c, .cpp的区别。你在.c里面写一个class,你让其他的C编译器怎么工作?

我说的是在我的 C++ 网络库调用了 c 语言写的 kcp.c,是链接在一起,没有修改 skywind3000 大神提供的 ikcp.c 文件。我的封装放在另外的 C++ 源文件 kcp.cpp 里面。

这东东我已经做好了,链接放在最上面,你可以点进去看一下。我所问的事情是,LGPL 3.0 是否兼容 MIT 协议?

ntjbwcob

ntjbwcob5#

可以嵌入,没问题。

0tdrvxhp

0tdrvxhp6#

嵌入你这个是不是还要嵌入个QT进来,建议使用纯C++的标准,不要带其它库。

0aydgbwb

0aydgbwb7#

嵌入你这个是不是还要嵌入个QT进来,建议使用纯C++的标准,不要带其它库。

我弄了一个跑在 KCP 上面的 https,以及跑在 KCP 上面的 RPC. 因为 HTTP 协议涉及到 url, cookie, json 等等,我不想重新造那些轮子,所以选择依赖 Qt. 如果有兴趣的话,你可以考虑 fork 我这个库,重写协程部分适配到 cpp20 的 coroutine,再加上 libjson 之类的,应该会有很多人感兴趣。。但我现在没精力做这件事情了。

相关问题