Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Подскажите как найти странную ошибку ! Всем привет ! Написал многопоточный сервер использовал winsock2.h // для сокетов понаставить try - catch и логировать исключения а вообще достаточно просто внимательно посмотреть где идет выделение и удаление памяти и какие объекты могут обращаться на удаленную память https://www.cyberforum.ru/ cpp-networks/ thread51237.html C++ Таймаут? Доброго времени суток! Подскажите пожалуйста что использовать чтобы реализовать описанное ниже? Каждую, например, секунду отправляется запрос, пока не придёт ответ while(не придет ответ){ запрос Sleep(1000)//секунду //если нет ответа то сонва while } https://www.cyberforum.ru/ cpp-networks/ thread56565.html
C++ Программа для передачи файла по FTP https://www.cyberforum.ru/ cpp-networks/ thread49372.html
Господа, мне надо написать сабж, понятия не имею, с какой стороны подступиться. Ткните меня в какой-нить учебник, плиз. Даже не знаю, что в оглавлении искать. Win XP, MS Visual Studio 2008, C++ По поводу того, как "отослать их на удаленный компьютер", начни, например, с общих принципов построения сетей и передачи данных: http://book.itep.ru/1/intro1.htm Конкретно, тебе для начала надо...
ICQ.Отправляю Ident - от сервера приходит 8байт "мусора" C++
#include "winsock.h" #include "fstream.h" const char CommandStart = 0x2A; struct TLV{ unsigned short Type; unsigned short Len; char *data; TLV *next; };
C++ Сокет сервер: bind() постоянно возвращает (-1) Всем привет ! Вот значит делаю сокет сервер #include <iostream.h> #include "Winsock2.h" void main(){ DWORD WINAPI NetThread(LPVOID lpParam) { SOCKET sServerListen, sClient; struct sockaddr_in localaddr, clientaddr; HANDLE ... https://www.cyberforum.ru/ cpp-networks/ thread47643.html C++ Не могу отправить данные к серверу Добрый день.. Есть протокол MMP mail agent http://agent.mail.ru/ru/developers/licence.html- вот его описание Создаю сокет ,устанавливаю соединение , разобрался как формировать заголовок, далее ... сначала всё формируешь, потом отправляешь поток байт typedef struct { char msg; unsigned short length; } MsgBuf; https://www.cyberforum.ru/ cpp-networks/ thread51368.html
C++ Как прложение на VC может взаимодействовать с БД на хостинге? https://www.cyberforum.ru/ cpp-networks/ thread47392.html
Прочитал про сокеты - как их использовать на сях, как использовать в PHP... читал пример сервера и клиента http://i-novice.net/sokety-v-php/ я только не понял - кто должен запускать код... спасибо
C++ WinInet хедер Решил попробовать реализовать аутентификацию на сервере через WinInet. С сокетами работает хорошо. В общем начал мудрить с составлением шапки и наткнулся на проблемы. В общем мне нужно отправить... Решил вопрос с помощью HttpSendRequest при помощи 4 и 5 параметров. Соответственно указатель на массив данных для метода POST и PUT и размера этого массива. https://www.cyberforum.ru/ cpp-networks/ thread49833.html
C++ Winsock2.h:udp фрагментирование данных https://www.cyberforum.ru/ cpp-networks/ thread55697.html
Доброго времени суток! Подскажите пожалуйста, какие можно использовать средства (функции) для фрагментации большого буфера (большой в том смысл, что не влезет в один UDP пакет) так, чтобы можно... UDP протокол не гарантирует доставку. Все. Точка. Если тебе нужна гарантия доставки, то используй TCP. Ну или пиши свой протокол поверх UDP - получится тот же TCP, только намного хуже по качеству :)
C++ Сокеты через Ws2_32.dll
Есть ли у кого работающий пример гет запроса на какой-нибудь сайт ? В нэте всё в DEV-C++ не работает,а знаний что-либо исправить не хватает(((. http://club.shelek.ru/viewart.php?id=36
C++ передать вектор структур в функцию https://www.cyberforum.ru/ cpp-networks/ thread47979.html
Вот задался целью передать в функцию вектор структур, или хотябы указатель на него, чтобы производить над ним разлиные операции #include <unistd.h> #include <stdlib.h> #include <string.h>... #include <iostream> #include <vector> struct Employee{ }; void foo(std::vector<Employee> &lhs, int i){ lhs.resize(i); } int main(){ std::vector<Employee> v(10);
C++ Корректное завершение работы сокетов У меня система работает на синхронных сокетах. Для приема данных создается отдельный поток которые выполняет следующий код: char buff; int bytes_recv; while ((bytes_recv = recv(*m_psocket,... Делать более длительные задержки перед удалением я не могу если мне склероз не изменяет, в MSDN написано, что у функции recv(...) таймаут около 3 минут. https://www.cyberforum.ru/ cpp-networks/ thread48429.html
7 / 7 / 1
Регистрация: 16.10.2009
Сообщений: 11
27.10.2009, 14:10  [ТС] 0

Передача файла с помощью сокетов (UDP) - C++ - Ответ 323591

27.10.2009, 14:10. Показов 30560. Ответов 8
Метки (Все метки)

Лучший ответ Сообщение было отмечено как решение

Решение

Мда...... Складывается такое впечатление, что я общаюсь сам с собой........ (((((((((((

Тем не менее я все же сумел доделать свою лабу. Окончательный вариант выглядит следующим образом. (может пригодится тем, кто так же не может ни до кого достучаться... )

Код клиента:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
#include <string.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>
#include <memory.h>
#include <string.h>
 
   #pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
   #pragma comment (lib, "mswsock.lib")
 
  #define PORT 15150
  #define SERVERADDR "127.0.0.1"
  #define CLIENT_FILE "example.txt" //файл на клиенте
  #define Line "File is recivied"
  int p;
 
#define Nsize 1024
  int main(int argc, char* argv[])
  {
    char buffer[30*Nsize];
    char buff[Nsize + 1];
    printf("Client start working...\n");
 
    //иницилизация библиотеки Winsocks
    WSADATA WsaData;
    if( WSAStartup(0x0202, &WsaData) )
    {
        printf("Winsock cannot be started\r\n");
        return false;
    }
 
    //открытие сокета
    SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }
 
    //обмен сообщений с сервером
    // установка возможности широковещательного адреса
    int i = 1;
    if (setsockopt(my_sock, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == -1)
    {
        printf ("Error setting broadcast socket\n");
        WSACleanup();
        return -1;
    }
    HOSTENT *hst;
    sockaddr_in dest_addr;
    memset(&dest_addr, 0, sizeof(sockaddr_in));
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);
 
    
    // определение IP-адреса узла
    if (inet_addr(SERVERADDR))
      dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    else
      if (hst=gethostbyname(SERVERADDR))
        dest_addr.sin_addr.s_addr=((unsigned long **)
              hst->h_addr_list)[0][0];
    else
      {
        printf("Unknown host: %d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }
     
 
    while(1)
    {
      // чтение сообщения с клавиатуры
      printf("\nClient=>Server:");
      scanf("%s", buff);
      if (!strcmp(buff,"quit\n")) break;
 
      int N=30;
      printf("Number of block is:");
      scanf("%d", &N);
      char blockN[3];
      sprintf(blockN, "%3d", N);
      char tBuf[53];
      memcpy((void*)tBuf, (void*)blockN, 3); // в первые 3 символа пишем N
      memcpy((void*)(tBuf+3), (void*)buff, 50); // пишем в tBuf содержимое buff
 
      // Передача сообщений на сервер
      sendto(my_sock, tBuf, strlen(tBuf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));
 
      // Прием сообщения с сервера
      sockaddr_in server_addr;
      int server_addr_size=sizeof(server_addr);
      char* line = Line;
      p = 0;
 
      while(*buff!=*line)
          {
              memset(buff, 0, Nsize);
              int n=recvfrom(my_sock,&buff[0],Nsize + 1,0,
               (sockaddr *) &server_addr, &server_addr_size);
 
                printf("Was recieved bytes %d\n",n);
      
                if (n==SOCKET_ERROR)
                {
                   printf("recvfrom() error:"\
                   "%d\n",WSAGetLastError());
                   closesocket(my_sock);
                   WSACleanup();
                   return -1;
                }
                buff[n]=0;
                if(*buff!=*line)
                {
                for(int i=0;i<strlen(buff);i++)
                {
                  buffer[p+i] = buff[i];
                }
                
                p+=n;
                buffer[p]=0;
                }
           } 
 
      // Вывод принятого с сервера сообщения об успешной операции на экран
      printf("Client<=Server:%s",&buff[0]);
 
      FILE *file;
      char* file_name = CLIENT_FILE;
        file = fopen( file_name, "w" ); 
        fputs(buffer, file );
        memset(buffer, 0, 30*Nsize * sizeof(char));
        fclose( file );
    }
 
    //выход
    closesocket(my_sock);
    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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>
#include <memory.h>
#include <string.h>
#pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
#pragma comment (lib, "mswsock.lib")
 
  #define PORT 15150    // порт сервера
  #define Line "File is recivied"
  #define Nsize 1024
 
  int main(int argc, char* argv[])
  {
    char buff[Nsize];
 
    printf("Server start working...\n");
 
    //подключение библиотеки 
    WSADATA WsaData;
    if( WSAStartup(0x0202, &WsaData) )
    {
        printf("Winsock cannot be started\r\n");
        return false;
    }
    //создание сокета
    SOCKET my_sock;
    my_sock=socket(AF_INET,SOCK_DGRAM,0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("Socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }
 
    //связывание сокета с локальным адресом 
    sockaddr_in local_addr;
    memset(&local_addr, 0, sizeof(sockaddr_in));
    local_addr.sin_family=AF_INET;
    local_addr.sin_addr.s_addr=INADDR_ANY;
    local_addr.sin_port=htons(PORT);
 
    if (bind(my_sock,(sockaddr *) &local_addr, sizeof(local_addr)))
    {
      printf("bind error: %d\n",WSAGetLastError());
      closesocket(my_sock);
      WSACleanup();
      return -1;
    }
 
    //обработка пакетов, присланных клиентами
    while(1)
    {
      char tBuf[53];
      sockaddr_in client_addr;
      memset(&client_addr, 0, sizeof(sockaddr_in));
      int client_addr_size = sizeof(sockaddr_in);
      int bsize=recvfrom(my_sock, tBuf, Nsize * sizeof(char), 0, (sockaddr *) &client_addr, &client_addr_size);
      if (bsize==SOCKET_ERROR)
      {
            printf("recvfrom() error: %d\n", WSAGetLastError());
            break;
      }
 
      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst;
      hst=gethostbyaddr((char *)&client_addr.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",(hst)?hst->h_name:"Unknown host",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
 
       char blockN[3];
       memcpy((void*)blockN, (void*)tBuf, 3);
       memcpy((void*)buff, (void*)(tBuf+3), 50); //выделztv содержимое buff  
       int N = atoi(blockN); //определяем N
       printf("\nNumber of block is:%d\n", N);
 
      // добавление завершающего нуля
      buff[bsize-3]=0;
 
      // Вывод на экран 
      printf("Client=>Server:%s\n",buff);
 
      FILE *file;
      char* file_name = buff;
      file = fopen( file_name, "r" );
      if( file != 0 )
      {
            char buffer[Nsize + 1];
            fseek(file,0,2);
            int filesize = ftell(file);
            int filemarker = 0;
            fseek(file,Nsize*N,0);
            int szee = Nsize;
 
             while (szee == Nsize)
            {
              printf("Recieve file - ");
              memset(buffer, 0, Nsize);
              szee = fread(buffer, sizeof(char), Nsize, file);
 
              sendto(my_sock,&buffer[0],szee,0,
              (sockaddr *)&client_addr, sizeof(client_addr));
              printf("filemarker = %d of filesize = %d \n", filemarker, filesize);
              filemarker += szee;
            }
             char* line = Line;
             sendto(my_sock,&line[0],strlen(&line[0]),0,
              (sockaddr *)&client_addr, sizeof(client_addr));
 
          fclose(file);
        }
               else
            {
               printf("File not found !!!");
            }
    }
    system("PAUSE");
    return 0;
  }


Вернуться к обсуждению:
Передача файла с помощью сокетов (UDP) C++
7
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2009, 14:10
Готовые ответы и решения:

Передача файла по локальной сети с помощью сокетов
Как организовать передачу файла по локальной сети с помощью сокетов? Что нужно писать в программе сервер и в программе клиент

Передача аудио потока с одного компьютера на другой с помощью ffmpeg и .net сокетов
Планирую передавать стримом аудио с одного компа на другой с помощью ffmpeg, который, вроде, входит в состав emgu cv(рядом нет пк, чтобы...

Чтение из буфера.Передача файла сокетов
Суть вопроса,что у меня не так??? рассказываю что есть,в общем прога отправляет данные,эт норм,но мне надо чтобы когда я...

8
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2009, 14:10
Помогаю со студенческими работами здесь

Передача файла по udp
Всех приветствую! Как передать файл по udp больше 8кб? Как пишут на различных источниках нужно его порезать и передать. Не совсем...

Передача файла по udp
Здравствуйте. Пробую передать файл с &quot;клиента&quot; на &quot;сервер&quot;. Отправка файла от клиента: void MainWindow::send_file() { quint8...

Передача файла по протоколу UDP
Сервер передает файл клиенту если его размер файла больше 8192 байта то файл разбивается на части. С этим все в порядке но вот со...

Работа нескольких UDP сокетов с 1м портом
Здравствуйте, возникла у меня такая проблемка: есть 2+ программы, расположенные на одной машине, которые должны читать данные с одного и...

Отправка сокетов в виде массивов по UDP-протоколу
Читающим доброе время суток, вот хочу обратиться за помощью. Суть проблемы состоит в отправка сокетов в виде массивов по...

0
Новые блоги и статьи
Winforstrap или красявый дизайн своими руками на HTML+JS+Winform­s
anomal6 04.03.2025
Сидел тут вечером ковырял проект на MAUI, и как же глупо создаются пакеты MSIX и система обновлений пакета публикации, но не об этом. Бывает нужен современный дизайн программы а писать на MAUI,. . .
Формат данных для симуляции физики, посредством распространённы­­­­х не обученных моделей.
Hrethgir 04.03.2025
Что-то как-то снова потерялось, зато катангенсы закатангесились в одном сообщении. На днях писал, что планирую для работы апгрейдить (на этот раз удачно) девайс для работы (конкретно - здоровья для,. . .
Концепция variadic
CoderHuligan 04.03.2025
Мне не очень нравится (а кому это нравится?) что у нас есть отдельно компилятор, отдельно линковщик, причем со своим собственным командным языком. При этом усложнении надо знать помимо языка. . .
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class — два мощных инструмента для обуздания неизменяемых структур данных, каждый со своим уникальным подходом к решению этой задачи. История их появления весьма. . .
Создание производительны­­­х API с Java и gRPC
Wired 04.03.2025
В мире микросервисной разработки вопрос производительности часто становится краеугольным камнем. И хотя REST API давно завоевал сердца разработчиков своей простотой и интуитивностью, при высоких. . .
Что нового в JDK 24
Wired 04.03.2025
JDK 24 — это настоящий прорыв в эволюции Java, который кардинально меняет правила игры. В этом релизе разработчики Oracle наконец-то довели до ума множество критически важных улучшений в. . .
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Погружаясь в мир блокчейн-разработки на Java, разработчик получает доступ к внушительному арсеналу инструментов. В отличие от Solidity, который "заперт" в экосистеме Ethereum, Java предоставляет. . .
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru