我希望拓展自己的 C++ 知识,所以首先要学习网络编程。
我想制作一个 IRC 机器人(它有望教会我关于套接字编程和网络主题方面的知识),但我不知道从哪里开始。如果有人能向我解释 IRC 机器人的工作原理,并指导我一些学习资源,那就太好了。简单的代码片段也将非常出色......
编辑:
忘记提到我使用 ubuntu,因此 Windows 方式不可选。
我希望拓展自己的 C++ 知识,所以首先要学习网络编程。
我想制作一个 IRC 机器人(它有望教会我关于套接字编程和网络主题方面的知识),但我不知道从哪里开始。如果有人能向我解释 IRC 机器人的工作原理,并指导我一些学习资源,那就太好了。简单的代码片段也将非常出色......
编辑:
忘记提到我使用 ubuntu,因此 Windows 方式不可选。
它们都是斯蒂文斯惯常和预期的卓越品质。我不知道他整合所有这些书籍的计划是什么,
std::vector<>
和std::string
,但我认为应该先编写boost.asio程序,然后再学习传统套接字。 - ildjarn我的建议:
我首先会用快速编写、功能强大的高级语言,如Python编写机器人。熟悉网络工具、IRC协议等。
学习底层套接字和网络知识。对于Unix系统,可以看看《Unix网络编程》。
用C++编写你的机器人!犯错误,修复它们,并坚持不懈。
学习C/C++套接字编程的最佳指南一定是迄今为止最好的Beej's Guide to Network Programming。它通过示例和详细描述介绍了所有必要的步骤。据我所知,这个网站唯一缺少的信息是IPv6多播。
让我们从一个简单的客户端服务器示例开始,使用Qt框架非常容易。例如:
server.cpp:
#include <QTcpSocket>
#include <QTcpServer>
int main()
{
QTcpServer *tcpServer = new QTcpServer(); //creates TCP-based server
tcpServer->listen(QHostAddress("172.16.254.1"),5300); //listen on your IP adress, port 5300
while ( tcpServer->isListening() ) //while server is listening
{
QTcpSocket* tcpSocket; //define TCP-based socket
tcpServer->waitForNewConnection(); //server waits for connection
if ( (tcpSocket = tcpServer->nextPendingConnection()) ) //if there are connections to be processsed
{
tcpSocket->write("hello",6); //write "hello" to the socket, client is connected to
tcpSocket->flush();
}
}
}
client.cpp:
#include <QDebug>
#include <QTcpSocket>
int main()
{
QTcpSocket *tcpSocket = new QTcpSocket(); //create TCP-based socket
tcpSocket->connectToHost("172.16.254.1",5300); //connect socket to server
tcpSocket->waitForConnected(); //wait
tcpSocket->waitForReadyRead();
qDebug() << tcpSocket->readAll();
}
您只需要在一个终端窗口中运行第一个程序,在另一个终端窗口中运行第二个程序。
您可以在这里找到更多的Qt网络示例。
我知道这本书有点老了,它叫做
“Beej的指南:使用Internet Socket进行网络编程”
Beej提供的所有内容都是100%免费的,以下是学习网络编程基础的网站。
我仍然推荐在这里提供的书籍,因为它们提供了关于套接字和TCP/IP协议的相当扎实的信息。
《Unix网络编程:套接字联网API》- W. Richard Stevens
《TCP/IP详解 卷1:协议》(第2版) - W. Richard Stevens
《UNIX网络编程卷2:进程间通信》(第2版) - W. Richard Stevens
《TCP/IP详解 卷1:协议》(第2版) - Kevin Fall (作者), W. Stevens (作者)
《TCP/IP指南:互联网协议完全参考手册》(第1版) - Charles M. Kozierok
我不是网络程序员或软件开发人员,我的唯一兴趣是仅限于游戏开发中的网络和复制技术,特别是针对虚幻引擎。请不要私信我或询问与网络相关的问题。