Подтвердить что ты не робот

Что такое простой пример сервера или клиента C или С++ TCP?

Мне нужно быстро реализовать очень небольшое C/С++ TCP-серверное/клиентское решение. Это просто передача буквально массива байтов с одного компьютера на другой - не требуется масштабируемое/чрезмерно сложное. Чем проще, тем лучше. Быстрая и грязная, если вы можете.

Я попытался использовать код из этого учебника, но я не смог его построить, используя g++ в Linux: http://www.linuxhowtos.org/C_C++/socket.htm

Если возможно, я бы хотел избежать сторонних библиотек, так как система, в которой я запускаю это, довольно ограничена. Это должно быть C или С++, поскольку существующее приложение уже реализовано.

Благодаря ответу emg-2 мне удалось сделать приведенный выше пример кода совместимым с С++, выполнив следующие шаги:

Добавьте эти заголовки к клиенту и серверу:

#include <cstdlib>
#include <cstring>
#include <unistd.h>

В server.c измените тип clilen на socklen_t.

int sockfd, newsockfd, portno/*, clilen*/;
socklen_t clilen;

В client.c измените следующую строку:

if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) { ... }

To:

if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
4b9b3361

Ответ 1

Я использовал Beej Guide to Network Programming в прошлом. Это в C, а не С++, но примеры хороши. Перейдите непосредственно в раздел 6 для простых клиентских и серверных примеров программ.

Ответ 2

Если код должен быть простым, то вы, вероятно, попросите пример C на основе традиционных сокетов BSD. Такие решения, как boost::asio, очень сложны, когда речь идет о коротком и простом примере "привет мир".

Чтобы скомпилировать приведенные вами примеры, вы должны сделать простые исправления, потому что вы компилируете в компиляторе С++. Я имею в виду следующие файлы:
http://www.linuxhowtos.org/data/6/server.c
http://www.linuxhowtos.org/data/6/client.c
от: http://www.linuxhowtos.org/C_C++/socket.htm

  • Добавьте следующие файлы в оба файла:

    #include <cstdlib>
    #include <cstring>
    #include <unistd.h>
    
  • В client.c измените строку:

    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

    в

    if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

Как вы можете видеть на С++, требуется явное приведение.

Ответ 4

Хотя много лет назад clsocket кажется очень хорошей кросс-платформой (Windows, Linux, Mac OSX): https://github.com/DFHack/clsocket