Ответ 1
Я использовал Beej Guide to Network Programming в прошлом. Это в C, а не С++, но примеры хороши. Перейдите непосредственно в раздел 6 для простых клиентских и серверных примеров программ.
Мне нужно быстро реализовать очень небольшое 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)
Я использовал Beej Guide to Network Programming в прошлом. Это в C, а не С++, но примеры хороши. Перейдите непосредственно в раздел 6 для простых клиентских и серверных примеров программ.
Если код должен быть простым, то вы, вероятно, попросите пример 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)
{ ... }
Как вы можете видеть на С++, требуется явное приведение.
попробуйте boost:: asio lib (http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html), у него много примеров.
Хотя много лет назад clsocket кажется очень хорошей кросс-платформой (Windows, Linux, Mac OSX): https://github.com/DFHack/clsocket
Вот несколько примеров для:
1) Простой
2) Вилка
3) Темы
сервер: