Форум программистов, компьютерный форум CyberForum.ru

Консольный чат не принимает сообщение по сети от такого же экземпляра - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как C++ распознать кодировку файла с расширением-и создавать такие же http://www.cyberforum.ru/cpp-beginners/thread1101711.html
как С++ распознать кодировку файла с расширением- и создавать такие же к примеру game.dat или программа AssetCacheBuilder.exe что создает файл asset.dat меня интересует код как это происходит и создать похожую и улучшить ей модернезировать
C++ Динамическое выделение памяти. Не получается заполнить массив структур Доброго времени суток, никак не получается справится с проблемой: не получается заполнить массив структур struct rec_{int i; char *a;} из n элементов (n-число записей в массиве структур) следующими данными: a указывает на введенную с клавиатуры строку символов, которая сохраняется в динамическом массиве с минимально необходимой для хранения введенной строки длиной. Помогите, пожалуйста (идея... http://www.cyberforum.ru/cpp-beginners/thread1101697.html
Code::Blocks 12.11 - ошибки при написании Hello, World C++
Ребят вчера поставила Code::Blocks, всё норм создаю проект win 32, добавляю новый файл с++, и при компиляции простого кода...примитивного #include<iostream> int main() { cout << "hello wrold" << endl; system("pause"); return 0; }
C++ Компонент для переключения вкладок
Товарищи, каким образом(название компонента) в VS2010 создать форму такого* вида? *Название параметра - отдельное окно. Скрин: Благодарю!
C++ OpenCv 2 4 7 Ошибка при создании файла vec http://www.cyberforum.ru/cpp-beginners/thread1101691.html
Что обозначает эта ошибка и как её исправить ?
C++ Написать функцию, которая бы выводила данный массив в указанном виде Дан массив числе,например (1,2,3,4),нужно написать функцию,которая бы выводила этот же массив (1,1+2,1+2+3,1+2+3+4),следовательно (1,3,6,10).Помогите плиз,не могу понять как это сделать,элементы вводить с консоли. подробнее

Показать сообщение отдельно
Вованя
116 / 116 / 46
Регистрация: 20.02.2014
Сообщений: 408
20.02.2014, 23:24     Консольный чат не принимает сообщение по сети от такого же экземпляра
Писал точно такой же консольный чат на Си, в основном потоке отправлял сообщения функцией send(), а в дополнительном принимал функцией recv(), то есть recv() не блокировала работу всей программы.
Попробовал написать тоже самое, но в ООП стиле на С++, но при этом столкнулся с проблемой - не принимаются сообщения, при это проверил работоспособность, сконнектившись с чатом, написанным на Си - все работает. То есть два экземпляра написанных С++ не печатают входящие сообщения.
Подскажите, в чем проблема. В С++ новичок, так что не пинайте сильно =))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DWORD WINAPI RecvThread(LPVOID ptrConnect)
{
    Connect *pConn = (Connect*)ptrConnect;
    while(true)
        pConn->Recv();
    return 0;
}
 
int main(int argc, char *argv[])
{
    HANDLE hrecvThread;
    DWORD recvThreadID;
    
    Connect *pConn = new Connect;
    if(pConn == NULL)
        return -5;
    
    if(argc > 1)
        pConn->SetUpClient();
    else pConn->SetUpServer();
 
    hrecvThread = CreateThread(0, 0, RecvThread, (LPVOID)pConn, 0, &recvThreadID);
    if(!hrecvThread)
        return -25;
 
    while(true)
    {
        if(!pConn->Send())
            break;
    }
}
И сам класс с моей функцией Recv

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Connect
{
private:
    WSADATA wsaData;
    struct sockaddr_in sock;
    int port;
    int recvBytes;
    char ip[16];
    char send_buf[4096];
    char recv_buf[4096];
    void Init(void);
    SOCKET lstnSocket,
           connSocket;
 
public:
    void SetIp(const char*);
    void SetPort(int);
    void SetUpServer();
    void SetUpClient();
    bool Send();
    void Recv();
    Connect();
};
 
void Connect::Recv()
{
    recvBytes = recv(connSocket, recv_buf, 4096, 0);
    if(recvBytes > 0)
        printf("To you: %s", recv_buf);
}
bool Connect::Send()
{
    printf("You: ");
    scanf("%s", send_buf);
    if(!strcmp(send_buf, "logout"))
        return false;
 
    send(connSocket, send_buf, strlen(send_buf) + 1, 0);
    return true;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru