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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Вованя
125 / 125 / 47
Регистрация: 20.02.2014
Сообщений: 443
#1

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

20.02.2014, 23:24. Просмотров 182. Ответов 0
Метки нет (Все метки)

Писал точно такой же консольный чат на Си, в основном потоке отправлял сообщения функцией 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 23:24     Консольный чат не принимает сообщение по сети от такого же экземпляра
Посмотрите здесь:

Чат по сети между двумя компами - C++
Всем добра! сложилась такая задачка, компы связаны по сети (кабельно), надо отправить сообщение друг-другу. такая банальная тема, но все...

Сложение экземпляра базового класса и экземпляра наследника - C++
Добрый вечер! Моя задача - сложить экземпляр базового класса и наследника. Нужно сделать так, чтобы результат сложения "знал"...

Функция F1, которая не принимает и не возвращает значений, но выводит на экран любое сообщение - C++
На языке С/C++ написать программу в которой имеется функция F1, которая не принимает и не возвращает значений, но выводит на экран любое...

Проверяю, являются ли 4 строки стихом. "й" принимает за "и", тем самым принимает за слог - C++
Суть программы: банальная проверка на то, являются ли 4 строки стишком. Метод решения задачи: равное кол-во слогов и одинаковые последние...

Консольный компилятор C/C++. - C++
Привет всем !!! Интересует такое - есть ли где ниебуть такой компилятор чтобы писать исходный текст в блокнотике а потом с помощью ВАТ...

Консольный Сапер - C++
Пишу консольного сапера, не могу организовать вывод на консоль поля, мин и движение по полю, точнее что то я организовал, но что именно...

Консольный таймер - C++
Здравствуйте,мне для программы нужен консольный таймер,скажите пожалуйста,как его сделать. Знаю что тема уже поднималась,но там ответа я не...

Pacman консольный - C++
Переписывал прогу пакмена из этого поста http://www.cyberforum.ru/csharp-beginners/thread430592.html, ради самообучения. В визуал студио...

Консольный параметры - C++
Доброго всем времени суток! У меня есть некая задумка, для которой необходимы размеры окна консоли. Вопрос,если ли в СИ++ какие - нибудь...

Консольный калькулятор - C++
Мне задали реализовать консольный калькулятор с выводом функций через параметры. Функции + - * / Пример использования: #myCalck...

Простой консольный калькулятор - C++
Я новичок, изучаю C++ всего первый день, начал изучение по книге Либерти "C++ за 21 день". Пока что из всех полученных мною знаний я...

Доделать консольный калькулятор - C++
Ребят. Вот есть такой недоделыш. Должно работать следующим способом: вы вводите любое выражение, например 2+70*3+2583/5, а прога понятное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru