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

UDP клиент сервер

17.12.2013, 22:25. Показов 2729. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста сделать
"Получение по запросу имени компьютера, физического адреса, IP-адреса."
Есть такое, но оно выводит в клиент дату и вермя, а надо то что выше.

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// 1.cpp : Defines the entry point for the console application.
//
 
#include "Winsock2.h"
#include <iostream>
#include <time.h>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
int main()
{
    cout<<"server"<<endl;
    time_t itime;
    struct hostent *rhost;
 
    char dtbuf[255]; 
    char *host;
    char  *tstr;
    time_t st; 
    time(&st); 
    strftime (dtbuf, sizeof (dtbuf), "%d/%m/%Y %H:%M",localtime (&st)); 
//  struct hostent *rhost;
    WSADATA wsadata;
    SOCKADDR_IN S1addr_iN,S2adde_IN;
    int port = 13; 
    SOCKET S1,S2;
    char buf[255];
    int lenbuf = 255;
    char busend[255]="12";
    int S2_LEN = sizeof(S2adde_IN);
    WSAStartup(MAKEWORD(2,2),&wsadata);
    S1addr_iN.sin_family = AF_INET;
    S1addr_iN.sin_port = htons(port);
    S1addr_iN.sin_addr.s_addr =  htonl(INADDR_ANY);
 
    S1 = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
 
    if (S1 == SOCKET_ERROR)
    {
        cout<<"Ошибка создание сокета"<<endl;
    }
    if (bind(S1,(LPSOCKADDR)&S1addr_iN,sizeof(S1addr_iN)) == -1)
    {
        cout<<"Ошибка"<<endl;
    }
 
    int size = sizeof(S2adde_IN);
    recvfrom(S1,buf,255,0,(LPSOCKADDR)&S2adde_IN,&size);
    cout<<buf<<endl;
 
 
 
    rhost=gethostbyaddr((char*)(&S2adde_IN.sin_addr), 
                sizeof(S2adde_IN.sin_addr), AF_INET);
    //Информация 
    if(h_errno){
            printf("gethostbyaddr error: %d\n", h_errno);
            host=inet_ntoa(S2adde_IN.sin_addr);
        }
        else{
            host=rhost->h_name;
        }
 
        itime = time(NULL);
        tstr = ctime(&itime);
 
        cout<<"IP adress"<<endl;
        cout<<S2adde_IN.sin_addr.s_addr<<endl;
        
        printf("%s request from %s:%d\n", tstr, host, 
                htons(S2adde_IN.sin_port));
 
    sendto(S1,dtbuf,255,0,(LPSOCKADDR)&S2adde_IN,size);
    closesocket(S1);
    WSACleanup();
 
    return 0;
}
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 1.cpp : Defines the entry point for the console application.
//
 
#include "Winsock2.h"
#include <iostream>
#include <time.h>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
int main()
{
    cout<<"klient"<<endl;
    char dtbuf[255]; 
    char *host;
    time_t st; 
    time(&st); 
    strftime (dtbuf, sizeof (dtbuf), "%d/%m/%Y %H:%M",localtime (&st)); 
    struct hostent *rhost;
    WSADATA wsadata;
    SOCKADDR_IN S1addr_iN,S2adde_IN;
    int port = 13; 
    SOCKET S1,S2;
    char buf[255];
    int lenbuf = 255;
    char busend[255]="12";
    int S2_LEN = sizeof(S2adde_IN);
    WSAStartup(MAKEWORD(2,2),&wsadata);
    S1addr_iN.sin_family = AF_INET;
    S1addr_iN.sin_port = htons(port);
    S1addr_iN.sin_addr.s_addr =  inet_addr("192.168.1.2");
 
    S1 = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
 
    if (S1 == SOCKET_ERROR)
    {
        cout<<"Ошибка создание сокета"<<endl;
    }
    int size = sizeof(S1addr_iN);
    
 
    sendto(S1,dtbuf,255,0,(LPSOCKADDR)&S1addr_iN,size);
 
    recvfrom(S1,buf,255,0,(LPSOCKADDR)&S2adde_IN,&size);
 
    cout<<buf<<endl;
 
      /*
        rhost=gethostbyaddr((char*)(&S2adde_IN.sin_addr), 
            sizeof(S2adde_IN.sin_addr), AF_INET);
        if(h_errno){
        printf("gethostbyaddr error: %d",h_errno);
        host=inet_ntoa(S2adde_IN.sin_addr);
        } 
        else{
        host=rhost->h_name;
        }
        
        // Выводим информацию о поступившем ответе
        printf("%s - reply from %s\n", buf, host);
        */
 
    closesocket(S1);
    getchar();
    WSACleanup();
    return 0;
}
Имя компьютера я так понимаю надо через gethostname выводить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2013, 22:25
Ответы с готовыми решениями:

UDP Клиент Сервер
Есть простой UDP клиент и UDP эхо-сервер. Вот исходники: Сервер: #include &quot;stdafx.h&quot; #pragma comment ( lib,...

Клиент-Сервер отправка сообщений по udp
Здравствуйте уважаемые форумчане. Я раньше не работал с сетьями. Поэтому обращаюсь за помощью. Мне надо чтобы клиент мог отправить...

Клиент сервер(Sokets UDP) на разных языках
Возможно ли сделать сервер на Delphi а клиент на С++ ??? Вот мой код сервера(Delphi) и клиента (С++). Почему у меня не работает? не...

2
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
19.12.2013, 18:27  [ТС]
никто не знает?
0
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
23.12.2013, 11:34
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
/* ....... */
HOSTENT *hst;
struct sockaddr_in from;
/* ....... */
 *nLen=recvfrom(serv,buf,j,0,(struct sockaddr*)&from,&(*nLength));
 if(*nLen>0)
 {
                        host = "";
                        date_M=DT.CurrentDate(); //дата
                        time_M=DT.CurrentTime(); //время
                        IpAddr = inet_ntoa (from.sin_addr );  // получаем IP адрес
                     if(ListBox1->Items->Count > 0)
                       {
                        for (int i = 0; i < ListBox1->Items->Count; i++)
                           {
                                if (ListBox1->Items->Strings[i] == IpAddr)
                                  {
                                    host = IpAddr;
                                    break;
                                  }
                           }
                       }
                     if(host == "")
                       {
                        hst = gethostbyaddr((char*)&from.sin_addr,4,AF_INET); //получение имини хоста
                        if (hst != NULL)  //если определился хост
                                host = hst->h_name;  // само имя хоста
                        else   //если нет, то присваемаем переменной хосту ip адрес
                            {
                                ListBox1->Items->Add(IpAddr);
                                host = IpAddr;
                            }
                       }
/* ..... */
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2013, 11:34
Помогаю со студенческими работами здесь

Сервер принимает пакеты если клиент указывает неверный порт получателя UDP.
Вот возникла проблема не могу понять почему сервер принимает пакеты если клиент указывает неверный порт получателя UDP. Кто то может...

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

Socks5 udp клиент
Нужен пример кода socks5 клиента отправляющего и принимающего UDP пакеты. И что значит Ассоциирование UDP-порта? Для udp соединения через...

Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Добрый день всем. Проблема заключается в следующем: Есть клиент-серверное приложение, хочу реализовать своего рода защиту, чтобы при...

Работа с портами (UDP клиент)
Пишу программу UDP клиент. Задаем номер порта, откуда принимаем информацию и сразу выводим ее в окне. Возникла такая проблема: когда задаю...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru