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

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

Восстановить пароль Регистрация
 
Вованя
116 / 116 / 46
Регистрация: 20.02.2014
Сообщений: 408
20.02.2014, 23:24     Консольный чат не принимает сообщение по сети от такого же экземпляра #1
Писал точно такой же консольный чат на Си, в основном потоке отправлял сообщения функцией 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++. C++
C++ Консольный Сапер
C++ Сложение экземпляра базового класса и экземпляра наследника
Консольный калькулятор C++
Pacman консольный C++
C++ Функция F1, которая не принимает и не возвращает значений, но выводит на экран любое сообщение
C++ Создание нового экземпляра дочернего класса из экземпляра базового
C++ Консольный таймер

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

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

Текущее время: 15:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru