1

Тема: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Типу має бути так:
В мене є мій exe-шнік і на двох інших ПК теж, наприклад. Тобто в мене буде серверна частина, яка бачить, хто ще зареєструвався в чаті (скачав його) і я можу відправляти повідомлення або клієнти до мене. Було б суперсько, якби ще можна було прикріпляти певні файли. Можете, будь ласка, порадити з чого почати і деякі деталі? І взагалі, може, давайте зробимо його разом? Це будуть надзвичайно цінні знання для мене. Працюю в Code Blocks (хотів в visual studio, бо там є робота з формами, але боюсь, що мій ноут його не потягне).

2

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

я колись на сісярпі робив, то й на с++ зможете
тільки тре з сокетами помучатись. певно що
от і гугліть - c++ tcp sockets

Подякували: Raikoho, ostap34PHP, leofun013

3

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Raikoho написав:

Працюю в Code Blocks (хотів в visual studio, бо там є робота з формами, але боюсь, що мій ноут його не потягне).

В Code::Blocks є «робота з формами» WxSmith, як бонус GUI- програма буде через wxWidgets працювати і у віндовсі, і у лінуксі.

Подякували: leofun011

4

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

ReAl написав:
Raikoho написав:

Працюю в Code Blocks (хотів в visual studio, бо там є робота з формами, але боюсь, що мій ноут його не потягне).

В Code::Blocks є «робота з формами» WxSmith, як бонус GUI- програма буде через wxWidgets працювати і у віндовсі, і у лінуксі.

Ого, не знав про таке. Дякую

5

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

ReAl написав:
Raikoho написав:

Працюю в Code Blocks (хотів в visual studio, бо там є робота з формами, але боюсь, що мій ноут його не потягне).

В Code::Blocks є «робота з формами» WxSmith, як бонус GUI- програма буде через wxWidgets працювати і у віндовсі, і у лінуксі.

Прихований текст

https://cdn.discordapp.com/attachments/333936584481177600/544880294285541377/unknown.png
https://i.kym-cdn.com/photos/images/newsfeed/000/985/688/015.gif

Подякували: leofun01, /KIT\2

6

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

FakiNyan написав:

я колись на сісярпі робив, то й на с++ зможете
тільки тре з сокетами помучатись. певно що
от і гугліть - c++ tcp sockets

Раз не буде більш детальної відповіді, то хотів спитати: а FTP сервак (типу лазити по папкам і брати шось з іншого пк або передавати йому) теж будується схожим методом, юзаючи c++ tcp sockets?

7

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Raikoho написав:
FakiNyan написав:

я колись на сісярпі робив, то й на с++ зможете
тільки тре з сокетами помучатись. певно що
от і гугліть - c++ tcp sockets

Раз не буде більш детальної відповіді, то хотів спитати: а FTP сервак (типу лазити по папкам і брати шось з іншого пк або передавати йому) теж будується схожим методом, юзаючи c++ tcp sockets?

гадки не маю, то ж інший протокол ніж tcp. Але нічого складного бути неповинно, то ж не rocket science, як кажуть.

8

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

FakiNyan написав:
Raikoho написав:
FakiNyan написав:

я колись на сісярпі робив, то й на с++ зможете
тільки тре з сокетами помучатись. певно що
от і гугліть - c++ tcp sockets

Раз не буде більш детальної відповіді, то хотів спитати: а FTP сервак (типу лазити по папкам і брати шось з іншого пк або передавати йому) теж будується схожим методом, юзаючи c++ tcp sockets?

гадки не маю, то ж інший протокол ніж tcp. Але нічого складного бути неповинно, то ж не rocket science, як кажуть.

Ех, ок, сенк

9

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

FTP, насправді, відносно складний протокол - там багато нашарувань для специфічних ситуацій.
Ну і так, звісно, FTP працює через TCP.
Зрештою, можете навіть http використовувати, Boost його підтримує.

Подякували: Raikoho, FakiNyan, ostap34PHP, leofun01, varkon5

10

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Raikoho написав:

FTP сервак (типу лазити по папкам і брати шось з іншого пк або передавати йому) теж будується схожим методом, юзаючи c++ tcp sockets?

OSI

Подякували: varkon1

11

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

fed_lviv написав:
Raikoho написав:

FTP сервак (типу лазити по папкам і брати шось з іншого пк або передавати йому) теж будується схожим методом, юзаючи c++ tcp sockets?

OSI

Можете розкрити свою думку? OSI - теоретична модель, стек TCP/IP не відоповідає OSI.

12

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Звісно не відповідає. Але, якщо людина хоче займатися мережевим програмуванням, то на мою думку з OSI і слід розпочинати. Щоб хоч розуміти, що дані протоколи (TCP та FTP) - протоколи різних рівнів. Тому їх порівняння ...

Подякували: koala, varkon2

13

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Одні балачки. Дивно.
Тут потрібен простий сервер, простий клієнт - на це дуже багато матеріалу в інтернеті.
Посилання на російський сайт
https://code-live.ru/post/cpp-http-server-over-sockets/
Краще не знайдете, все розписано максимально.
Автор написав код в багато рядків, тому здається, що коду багато. Насправді, його менше.
Далі, як підключити бібліотеку:
В Dev-Cpp

#pragma comment

Не працює. Це працює в білдері і в студіо.
Для Dev-Cpp
має бути створений проект,
Проект - Параметри Проекту - Параметри - Додати бібліотеку - (Перейти в папку, де встановлений Dev-Cpp, перейти MinGW64/x86_64-w64-mingw32/lib32/) - Вибрати libws2_32.a - Гаразд.
Код клієнта
Завантажує сторінку Google. Для обміну повідомленнями даний клієнт не потрібен, потрібно 2 сервера. Це так, інтересно

#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <vector>
#include <locale>
#include <sstream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
//Для Dev-Cpp метод вище
 
 
 
 
int main( void ){
 
WSADATA wsaData;
SOCKET Socket;
SOCKADDR_IN SockAddr;
struct hostent *host;
char buffer[10000];
int nDataLength;
string website_HTML;
 
// website url
string url = "www.google.com";
 
//HTTP GET
string get_http = "GET / HTTP/1.1\r\nHost: " + url + "\r\nConnection: close\r\n\r\n";
 
 
    if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
        cout << "WSAStartup failed.\n";
        system("pause");
        //return 1;
    }
 
    Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    host = gethostbyname(url.c_str());
 
    SockAddr.sin_port=htons(80);
    SockAddr.sin_family=AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
 
    if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
        cout << "Could not connect";
        system("pause");
        //return 1;
    }
 
    // send GET / HTTP
    send(Socket,get_http.c_str(), strlen(get_http.c_str()),0 );
 
    // recieve html
    while ((nDataLength = recv(Socket,buffer,10000,0)) > 0){        
        int i = 0;
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r'){
 
            website_HTML+=buffer[i];
            i += 1;
        }               
    }
 
    closesocket(Socket);
    WSACleanup();
 
    // Display HTML source 
    cout<<website_HTML;
 
    // pause
    cout<<"\n\nPress ANY key to close.\n\n";
    cin.ignore(); cin.get(); 
 
 
 return 0;
}
Подякували: leofun01, Raikoho2

14

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Ukrvital написав:

Одні балачки. Дивно.
Тут потрібен простий сервер, простий клієнт - на це дуже багато матеріалу в інтернеті.
Посилання на російський сайт
https://code-live.ru/post/cpp-http-server-over-sockets/
Краще не знайдете, все розписано максимально.
Автор написав код в багато рядків, тому здається, що коду багато. Насправді, його менше.
Далі, як підключити бібліотеку:
В Dev-Cpp

#pragma comment

Не працює. Це працює в білдері і в студіо.
Для Dev-Cpp
має бути створений проект,
Проект - Параметри Проекту - Параметри - Додати бібліотеку - (Перейти в папку, де встановлений Dev-Cpp, перейти MinGW64/x86_64-w64-mingw32/lib32/) - Вибрати libws2_32.a - Гаразд.
Код клієнта
Завантажує сторінку Google. Для обміну повідомленнями даний клієнт не потрібен, потрібно 2 сервера. Це так, інтересно

#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <vector>
#include <locale>
#include <sstream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
//Для Dev-Cpp метод вище
 
 
 
 
int main( void ){
 
WSADATA wsaData;
SOCKET Socket;
SOCKADDR_IN SockAddr;
struct hostent *host;
char buffer[10000];
int nDataLength;
string website_HTML;
 
// website url
string url = "www.google.com";
 
//HTTP GET
string get_http = "GET / HTTP/1.1\r\nHost: " + url + "\r\nConnection: close\r\n\r\n";
 
 
    if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
        cout << "WSAStartup failed.\n";
        system("pause");
        //return 1;
    }
 
    Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    host = gethostbyname(url.c_str());
 
    SockAddr.sin_port=htons(80);
    SockAddr.sin_family=AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
 
    if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
        cout << "Could not connect";
        system("pause");
        //return 1;
    }
 
    // send GET / HTTP
    send(Socket,get_http.c_str(), strlen(get_http.c_str()),0 );
 
    // recieve html
    while ((nDataLength = recv(Socket,buffer,10000,0)) > 0){        
        int i = 0;
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r'){
 
            website_HTML+=buffer[i];
            i += 1;
        }               
    }
 
    closesocket(Socket);
    WSACleanup();
 
    // Display HTML source 
    cout<<website_HTML;
 
    // pause
    cout<<"\n\nPress ANY key to close.\n\n";
    cin.ignore(); cin.get(); 
 
 
 return 0;
}

Сенк. Тільки я не зрозумів навіщо стільки мороки і навіщо взагалі юзати ці сокети, щоб завантажити сторінку гугл

15 Востаннє редагувалося Ukrvital (03.03.2019 19:07:56)

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Такий складний протокол передачі.
Хто знає, то сторінка google, чи то сторінка переказу банківських коштів?
Має бути надійність.
Надійність досягається за допомогою багатьох параметрів, таких як IP, порт на ін.
І це - не повна версія.
В повній версії перевіряються всі варіанти помилок і подальші дії при їх знайденні.
Функції можуть повертати дуже багато помилок. За допомогою if/else вони не перевіряються. Вони перевіряються за допомогою switch(). Після перевірки програма повинна сама вміти виправляти помилки. Це змінити протокол чи порт.
Якщо програма не може самостійно виправити помилку, вони видає MessageBox().
Проте, якщо ця програма є шкідливою, ніяких MessageBox() вона взагалі не видає.
Якщо не виправити ці помилки, то MessageBox() видасть сама система.

16

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

На нас знову бота тестують?

Подякували: /KIT\, FakiNyan2

17

Re: Чи можливо на с++ в простенькому IDE зробити консольний онлайн чат?

Пропоную розглянути бібліотеку boost/asio https://www.boost.org/doc/libs/1_66_0/d … mples.html там прямо у наведених прикладах є простенька реалізація чату. Вона доволі зручна та має непогану документацію.

Подякували: Raikoho1