Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
-12 / 0 / 0
Регистрация: 25.07.2019
Сообщений: 43
1

SFML Network TcpSocket

20.01.2020, 17:35. Показов 2362. Ответов 4

Author24 — интернет-сервис помощи студентам
Я только начал изучать это, до этого попробовал написать прогу который считает и выводит в консоль сколько раз запустили один .exeшник, я решил попробовать сделать еще что то похоже, тип чата, но у меня зависает когда выбираю клиент и после того как ввел имя, на socket.connect(ip, 2000); Наверное надо переписать весь код и дочитать документации и посмотреть английские гайды, но как то можно исправить этот код?:
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
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <SFML/Network.hpp>
#include <SFML/Graphics.hpp>
 
using namespace std;
using namespace sf;
 
int main(){
    IpAddress ip = IpAddress::getLocalAddress();
    TcpSocket socket;
    char connectionType;
    Packet packet;
 
    cout<<"Enter [s] for server or [c] for client: ";
    cin>>connectionType;
 
    if(connectionType == 's'){
        TcpListener listener;
        while(true){
            listener.listen(2000);
            listener.accept(socket);
            socket.receive(packet);
            socket.send(packet);
        }
    }
    else{
        string name, text;
        cout<<"Your name: ";
        cin>>name;
        socket.connect(ip, 2000);
        while(true){
            socket.receive(packet);
            packet>>text;
            cout<<text;
            packet.clear();
            text = "";
            if(Keyboard::isKeyPressed(Keyboard::O)){
                cout<<"Enter the text: ";
                cin>>text;
                text += " |";
                text += name;
                packet<<text;
                socket.send(packet);
            }
 
        }
    }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2020, 17:35
Ответы с готовыми решениями:

Простейший чат с использованием SFML Network
Доброго времени суток! Сегодня я решил попробовать написать простой чат, так как sfml мне кажется...

SFML network, как настроить public server
Имею 2 приложения клиент и сервер , хочу реализовать перенаправление на другого игрока после...

NetStart: The system seems to lack either network cards or network drivers
Пытаюсь скачать вин10 с диска. 64бит. Говорит что нет сетевых карт или сетевых драйверов. Драйверы...

The system seems to lack either network cards or network drivers (Не загружается ОС)
Перезапустил Windows, и выскачила такая ошибка Пробывал зайти в безопасный режим, но не выходит,...

4
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.01.2020, 17:51 2
Цитата Сообщение от Bauka555 Посмотреть сообщение
Я только начал изучать это, до этого попробовал написать прогу который считает и выводит в консоль сколько раз запустили один .exeшник, я решил попробовать сделать еще что то похоже, тип чата, но у меня зависает когда выбираю клиент и после того как ввел имя, на socket.connect(ip, 2000); Наверное надо переписать весь код и дочитать документации и посмотреть английские гайды, но как то можно исправить этот код?:
На клиенте, наверное, надо сначала send делать, а потом receive. А то они утебя оба ждут, когда придут данные
0
-12 / 0 / 0
Регистрация: 25.07.2019
Сообщений: 43
20.01.2020, 17:52  [ТС] 3
Не помогло(
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.01.2020, 17:54 4
Цитата Сообщение от Bauka555 Посмотреть сообщение
Не помогло(
Для начала на сервере сделай
C++
1
2
3
4
5
6
            listener.listen(2000);
            listener.accept(socket);
std::cout << "accept" << std::endl;
            int n = socket.receive(packet);
std::cout << "recv: " << n << std::endl;
            socket.send(packet);
0
-12 / 0 / 0
Регистрация: 25.07.2019
Сообщений: 43
20.01.2020, 18:12  [ТС] 5
я чуть поменял код и сработало:
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
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <SFML/Network.hpp>
#include <SFML/Graphics.hpp>
 
using namespace std;
using namespace sf;
 
int main(){
    IpAddress ip = IpAddress::getLocalAddress();
    TcpSocket socket;
    char connectionType;
    Packet packet;
 
    cout<<"Enter [s] for server or [c] for client: ";
    cin>>connectionType;
 
    if(connectionType == 's'){
        TcpListener listener;
        while(true){
            listener.listen(2000);
            listener.accept(socket);
            socket.receive(packet);
            socket.send(packet);
        }
    }
    else{
        string name, text;
        cout<<"Your name: ";
        cin>>name;
        socket.connect(ip, 2000);
        while(true){
            if(socket.Done) socket.receive(packet);
            packet>>text;
            cout<<text;
            packet.clear();
            text = "";
            if(Keyboard::isKeyPressed(Keyboard::LAlt)){
                cout<<"Enter the text: ";
                cin>>text;
                text += " |";
                text += name;
                packet<<text;
                socket.send(packet);
            }
        }
    }
 
    return 0;
}
Но если нажать лАлт то в обеих клиентах будет ожидать ввод, как можно это исправить?

Добавлено через 1 минуту
Цитата Сообщение от Bauka555 Посмотреть сообщение
if(socket.Done)
вот что поменял

Добавлено через 1 минуту
Цитата Сообщение от Bauka555 Посмотреть сообщение
if(socket.Done)
вот что добавил

Добавлено через 1 минуту
Как так сделать чтобы во время ввода, мог принимать данные с сокета?

Добавлено через 3 минуты
ааа не, проверил, вообще если создать 2 клиента они не будут видеть или принимать сообщения друг друга

Добавлено через 1 минуту
Ой я жестко затупил
0
20.01.2020, 18:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2020, 18:12
Помогаю со студенческими работами здесь

Проверка подключения TcpSocket
Добрый день. Собственно пишу клиент-серверное приложение и понадобилось проверить, подключен ли...

Работа с сетью: TcpSocket, Qnetworkmanager
Здравствуйте. Есть вот такой код. mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H...

Как перехватить tcpSocket AsyncConnect exception
Добрый день. Есть такой код: private readonly ManualResetEvent TimeoutObject = new...

Гнал процессор и после этого появилась надпись "The system seems to lack either network cards or network drivers"
Гнал процессор, обыно когда я это делал не было никаких проблем, теперь я решил сделать еще и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru