没有其它的特性,只是简单地基于 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 文件已经带上。
7条答案
按热度按时间dfddblmv1#
C++代码放入.c文件?这操作。。。。。
ao218c7q2#
C++代码放入.c文件?这操作。。。。。
C++ 原本就能够调用 C 语言接口的啊,比如 C++ 调用 openssl 和 ffmpeg 也很常见。kcp 没有独立的 makefile 制作成 .so,貌似除了放到工程里面编译,也没其它的好办法了。不过我不太了解是否 KCP 的授权协议允许这么干,所以过来问一下。
9rygscc13#
C++能调用C,没错。但请你先弄明白 .c, .cpp的区别。你在.c里面写一个class,你让其他的C编译器怎么工作?
von4xj4u4#
C++能调用C,没错。但请你先弄明白 .c, .cpp的区别。你在.c里面写一个class,你让其他的C编译器怎么工作?
我说的是在我的 C++ 网络库调用了 c 语言写的 kcp.c,是链接在一起,没有修改 skywind3000 大神提供的 ikcp.c 文件。我的封装放在另外的 C++ 源文件 kcp.cpp 里面。
这东东我已经做好了,链接放在最上面,你可以点进去看一下。我所问的事情是,LGPL 3.0 是否兼容 MIT 协议?
ntjbwcob5#
可以嵌入,没问题。
0tdrvxhp6#
嵌入你这个是不是还要嵌入个QT进来,建议使用纯C++的标准,不要带其它库。
0aydgbwb7#
嵌入你这个是不是还要嵌入个QT进来,建议使用纯C++的标准,不要带其它库。
我弄了一个跑在 KCP 上面的 https,以及跑在 KCP 上面的 RPC. 因为 HTTP 协议涉及到 url, cookie, json 等等,我不想重新造那些轮子,所以选择依赖 Qt. 如果有兴趣的话,你可以考虑 fork 我这个库,重写协程部分适配到 cpp20 的 coroutine,再加上 libjson 之类的,应该会有很多人感兴趣。。但我现在没精力做这件事情了。