Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Вованя
137 / 134 / 48
Регистрация: 20.02.2014
Сообщений: 478
Завершенные тесты: 1
#1

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

20.02.2014, 23:24. Просмотров 193. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 23:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Консольный чат не принимает сообщение по сети от такого же экземпляра (C++):

Консольный чат на WinSock - Delphi
Доброго времени суток. В общем есть консольный чат на WinSock, но проблема такая:обмениваться сообщениями сервер может только с одним...

Консольный ТСР-чат - C#
Всем доброго утра! Есть такой чат: namespace ChatServer { class Program { static ServerObject server; //...

Консольный чат в консольном приложении - Visual Basic .NET
Есть ли варианты как создать чат в консоли? Консоль сама по себе штука маленькая, весит мало, а как сделать может кто подсказать или...

Консольный чат - нужен пример - C (СИ)
Подскажите пожалуйста, пишу консольный чат на си, у программы клиента 2 процесса один отвечает за получение сообщений, другой ждет ввод с...

консольный чат с использованием socket - C++
Есть сервер и пару клиентов как можно организовать чат? если использовать стандартные функции типа send and recv возникают проблемы, так...

.NET 4.x консольный чат на протоколе ТСР - C#
как с нуля выглядит код который описывается в этой ссылке. Заранее спасибо!

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 23:24
Привет! Вот еще темы с ответами:

Консольный чат - проблемы с подключением - C#
Что почитать, куда нюхать , куда смотреть , чтоб создать чат в консольном ? я знаю вот эти библиотеки ( пространство имен, точно...

Консольный чат Клиенты-Сервер на сокетах - Java SE
При отправки сообщения клиентом, оно приходит только серверу, а как сделать, чтобы оно приходило еще всем клиентам? Сервер: ...

Консольный чат для двух удалённых клиентов - C Linux
Добрый день. Подскажите пожалуйста,я пишу на с консольный чат с использованием протокола TCP,но при запуске два клиента обмениваются один...

Консольный чат. Почему сервер не пересылает сообщения клиентам? - C#
пожалуйста помогите понять почему не работает мой консольный чат! сервер using System; using System.Collections.Generic; using...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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