C ++ сетевое программирование - PullRequest
12 голосов
/ 25 апреля 2011

Привет, я хотел бы расширить свои знания в C ++, поэтому первое, что я беру на себя, это сетевое программирование.

Я хочу создать бот IRC (который, я надеюсь, научит меня программированию сокетови сетевые темы), но я понятия не имею, с чего начать.Если бы кто-нибудь мог объяснить мне, как работают IRC-боты и как их делать, и направить меня к некоторым учебным ресурсам, это было бы действительно здорово.Простые фрагменты также были бы великолепны ...

Спасибо!

edit:

забыл упомянуть, что я использую Ubuntu, поэтому способ Windows не подходит

Ответы [ 5 ]

12 голосов
/ 25 апреля 2011

Чтобы понять сокеты и правильно их использовать, вам нужно Библия сокетов:

W. Ричард Стивенс, Сетевое программирование Unix, Том 1: API-интерфейс для сокетов (3-е издание)

У вас обязательно должна быть эта книга, прежде чем вы сядете, чтобы написать строку кода сокетов. Не выходи из дома без этого. В самом деле. Начиная с $ 35, используется на Amazon .

РЕДАКТИРОВАТЬ: ОП спросил о других томах. Вот два других:

У. Ричард Стивенс, Сетевое программирование UNIX, Том 2: Межпроцессные коммуникации (2-й Edition)
У. Ричард Стивенс, TCP / IP Illustrated, Vol. 1: Протоколы

Они обычного и ожидаемого Стивенса превосходного качества. Я не знаю, каковы были его планы по интеграции всех этих книг,

8 голосов
/ 25 апреля 2011

boost . asio (на мой взгляд) является стандартом де-факто для написания независимого от платформы сетевого кода в современном C ++.

3 голосов
/ 25 апреля 2011

Лучшим руководством для изучения программирования сокетов на C / C ++ должно быть Руководство Beej по сетевому программированию на сегодняшний день. Он проходит все этапы, которые вам нужно знать, как с примерами, так и с подробным описанием. Насколько я знаю, единственная информация, которой не хватает на этом сайте, - многоадресная рассылка IPv6.

3 голосов
/ 25 апреля 2011

Мои рекомендации:

  1. Я бы сначала написал бота на быстром для написания, мощном языке высокого уровня, таком как Python.Привыкните к работе с сетевыми инструментами, протоколом IRC и прочим.

  2. Узнайте о сокетах и ​​работе в сети на низком уровне.Для Unix, я бы сказал, взгляните на Unix Network Programming.

  3. Напишите своего бота на C ++!Делайте ошибки, исправляйте их и следите за ними.

2 голосов
/ 18 сентября 2013

Начните с простого примера клиент-сервер. С фреймворком 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 здесь

...