Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/48: Рейтинг темы: голосов - 48, средняя оценка - 4.56
9 / 9 / 1
Регистрация: 27.07.2011
Сообщений: 90

socket'ы. или как написать клиент.

13.08.2011, 18:25. Показов 9454. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
драсте всем. вот начинаю начинать работать в сети в С++. приведите исходники программ - клиент отправляет серверу на порт 127.0.0.1 число(допустим 12345). а я дальше сам как нибудь. и сказать какую литературу почитать не забудьте. работаю в DEV-C++. Windows xp
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.08.2011, 18:25
Ответы с готовыми решениями:

socketы в MSVS2008
Подскажите пожалуйста, как использовать сокеты под виндой в Visual Studio 2008. Заранее спасибо.

Enc 28J60 telnet клиент или SMTP клиент
Всем привет. Если ли работающие библиотеки и скетчи для этой платы? В основном все для W5100 (( Спасибо

Как написать сервер-клиент на c++?
Мне нужно написать сервер, который будет отправлять клиенту единичку аля: "Все хорошо, я включен". А клиент будет подсчитывать сколько...

22
365 / 366 / 167
Регистрация: 11.06.2010
Сообщений: 703
13.08.2011, 18:30
ромик0, поищите Крис Касперски "Самоучитель игры на Winsock".
1
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 18:36
ромик0, https://www.cyberforum.ru/cpp-... 39027.html
1
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
13.08.2011, 18:44
Йон Снейдер: Эффективное программирование TCP/IP
маст, так сказать, рид.
2
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 18:46
Цитата Сообщение от villu Посмотреть сообщение
Йон Снейдер: Эффективное программирование TCP/IP
да хорошая книга.
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
13.08.2011, 18:48
ромик0
Могу бросить исходник с Сервер клиент который недавно сам сделал
0
9 / 9 / 1
Регистрация: 27.07.2011
Сообщений: 90
13.08.2011, 18:55  [ТС]
GoldDragon, конечно .
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
13.08.2011, 18:57
Вот откомпилируешь и всё
Вложения
Тип файла: rar Клиент - Сервер.rar (172.7 Кб, 275 просмотров)
2
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
13.08.2011, 20:19
Ну как работает?
1
9 / 9 / 1
Регистрация: 27.07.2011
Сообщений: 90
14.08.2011, 13:54  [ТС]
GoldDragon, увы нет. сколько исходников с сокетами откомпилировать не пробовал , DEV-C++ все время говорит что не знает этих функций типа - WSAStartup... такое ощущение , что я чего то не подключил. <winsock2.h>,<winsock.h>,<windows.h>,<io stream.h>. может бы ть еще что нибудь кроме библиотек нужно ?
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
14.08.2011, 14:15
Вы что не то сделали, запускайте Сервер и Клиент в Edit в клиенте пишите 127.0.0.1 и любой текст в Мемо после отправить сообщение придёт на сервер
0
 Аватар для Kopmec
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 31
14.08.2011, 14:51
Подскажи ссылочку на твой компилятор Dev-C++ скачал версию 4.9.9.2 она копилирует но не выполняет открытие командная стока не открывается только мигнет и сразу же изчезает наверно нерабочий или с багами
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
14.08.2011, 16:05
Kopmec, у тебя та же проблема что и здесь
0
9 / 9 / 1
Регистрация: 27.07.2011
Сообщений: 90
14.08.2011, 16:13  [ТС]
Kopmec, введи этот код и откомпилируй у меня таже версия . все должно работать
C++
1
2
3
4
5
6
#include <iostream.h>    //
int main() 
{
    cout << " TEXT" << endl;
    system("pause"); // это вводи в конце кода и консолька не будет убегать 
}



GoldDragon, щас попробую что нибудь своё забабахать. выложу если получится. твоё компилить отказывается.

Добавлено через 1 минуту
aram_gyumri,
GoldDragon, вам по сколько лет?
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
14.08.2011, 18:10
ромик0, мне 14 лет, а GoldDragon-у 19 лет
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 23:44
Цитата Сообщение от ромик0 Посмотреть сообщение
DEV-C++ все время говорит что не знает этих функций типа - WSAStartup... такое ощущение , что я чего то не подключил. <winsock2.h>,<winsock.h>,<windows.h>,<io stream.h>. может бы ть еще что нибудь кроме библиотек нужно ?
Помимо этих заголовочных файлов нужно ещё подключить библиотеки (dll).

Вот пример TCP-сервер, который получает от клиента сообщение и пересылает ему его же 4 раза, а потом отключается:

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
#include <stdio.h>
 
#include <winsock2.h>
#include <windows.h>
 
// останов библиотеки сокетов
void shut_down()
{
    printf( "\nShutting down...\t" );
    WSACleanup();
    puts( "[ OK ]" );
}
 
int main()
{
    WSADATA wsaData;
 
    printf( "============ TCP ECHO SERVER ============\nStartup...\t\t" );
 
    int err = WSAStartup( 0x0202, &wsaData );
 
    if( err != 0 )
    {
        puts( "[FAIL]" );
        fprintf( stderr, "WSAStartup error: %d\n", err );
        return -1;
    }
 
    puts( "[ OK ]" );
 
    //----------------- инициализировали библиотеку.
 
    printf( "Creating socket...\t" );
 
    SOCKET lstnSock; // listen socket - сокет, который будем слушать
 
    lstnSock = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP );
 
    if( lstnSock == INVALID_SOCKET )
    {
        puts( "[FAIL]" );
        fprintf( stderr, "Error creating socket: 0x%x\n", WSAGetLastError() );
        shut_down();
        return -1;
    }
 
    puts( "[ OK ]" );
 
    //------------------ создали сокет
 
    printf( "Binding address...\t" );
 
    struct sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_addr.s_addr = 0; // все адреса
    local_addr.sin_port = htons( 2100 ); // htons - Host to Network - преобразование в сетевой порядок байт
 
    if( bind( lstnSock, (struct sockaddr*)(&local_addr), sizeof(local_addr) ) == SOCKET_ERROR )
    {
        puts( "[FAIL]" );
        fprintf( stderr, "Error binding address: 0x%x\n", WSAGetLastError() );
        closesocket( lstnSock );
        shut_down();
        return -1;
    }
 
    puts( "[ OK ]" );
 
    //------------------ привязались к порту
 
    printf( "Listening...\t\t" );
 
    if( listen( lstnSock, 1 ) == SOCKET_ERROR ) // ждём подключений. максимум 1 в ОЧЕРЕДИ НА ПОДКЛЮЧЕНИЕ
    {
        puts( "[FAIL]" );
        fprintf( stderr, "Error listen: 0x%x\n", WSAGetLastError() );
        closesocket( lstnSock );
        shut_down();
        return -1;
    }
 
    puts( "[ OK ]" );
 
    //------------------ начали слушать порт
 
    printf( "----------------------\nInitialization is complete.\n\nListening...\n" );
 
    SOCKET clientSock; // сокет для клиента
    struct sockaddr_in clientAddr;
    int addrLen;
 
    clientSock = accept( lstnSock, (struct sockaddr*)(&clientAddr), &addrLen );
 
    char counter = 0;
 
    if( clientSock != INVALID_SOCKET )
    {
        printf( "Incoming connection from %s\n", inet_ntoa( clientAddr.sin_addr ) );
        // inet_ntoa - number to alpha - номер адреса в текст
 
        char buffer[1024];
 
        do
        {
            int rcv_bytes = recv( clientSock, buffer, 1023, 0 );
 
            if( rcv_bytes != SOCKET_ERROR )
            {
                buffer[ rcv_bytes ] = 0; // терминирующий 0 в конце
                printf( "Client says: %s\n", buffer );
                send( clientSock, buffer, rcv_bytes, 0 );
            }
            else
            {
                fprintf( stderr, "rcv_bytes == SOCKET_ERROR;  WSAGetLastError() 0x%x", WSAGetLastError() );
            }
 
            counter++;
        }
        while( counter < 4 ); // 4 раза делаем пересылаем сообщение назад и отключаемся
 
        puts( "4 messages echoed, quitting.\n----------------------" );
 
        closesocket( clientSock );
    }
    else
    {
        fprintf( stderr, "Invalid socket: 0x%x\n", WSAGetLastError() );
    }
 
    //------------------ завершение работы
    shut_down();
 
    return 0;
}
В DevC++ заходите в Project Options -> Parameters -> Add Library or Object и указываете ему путь к lib/libws2_32.a, и компилируете.

Отлаживать так: запускаете сервер, затем жмёте "Windows+R" или "Пуск -> Выполнить", вводите cmd, затем запускаете "telnet 127.0.0.1 2100" - он подключится к 127.0.0.1 на порт 2100. Вводите символы, он вам их возвращает назад и выводит у себя в консоли, и так 4 раза. Потом отрубается. Если будут ошибки в bind - попробуйте изменить порт с 2100 на что-то другое.

Примечание: порты с номером 1024 и ниже зарезервированы под конкретные сетевые службы и их использование НЕ рекомендовано.

А вообще, почитайте литературу, которую вам тут советовали, за справкой по функциям обращайтесь на msdn.microsoft.com (например, ищите так). Если надумаете писать для Unix - милости просим в маны

Удачи.
2
9 / 9 / 1
Регистрация: 27.07.2011
Сообщений: 90
15.08.2011, 12:05  [ТС]
C++
1
2
3
  [Linker error] undefined reference to `WSAGetLastError@0' 
  [Linker error] undefined reference to `htons@4' 
  [Linker error] undefined reference to `listen@8'   [Linker error] undefined reference to `WSAGetLastError@0'   [Linker error] undefined reference to `send@16'   [Linker error] undefined reference to `recv@16'
и подобных ошибок много. что они могут значить?
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.08.2011, 12:26
ромик0, они означают, что сборщик не смог найти модуль, в котором реализованы эти функции. В mingw-средах (DevC++, Code::Blocks...) подключите lib/libws2_32.a через настройки среды (или, если компилируете ручками, через опцию -l) , в MSVC ws2_32.lib (либо через настройки компиляции, либо добавив в исходный текст строку #pragma comment (lib, "ws2_32.lib"); ).
1
9 / 9 / 1
Регистрация: 27.07.2011
Сообщений: 90
15.08.2011, 12:34  [ТС]
Цитата Сообщение от talis Посмотреть сообщение
В DevC++ заходите в Project Options -> Parameters -> Add Library or Object и указываете ему путь к lib/libws2_32.a
Цитата Сообщение от talis Посмотреть сообщение
#pragma comment (lib, "ws2_32.lib");
это сделал..
что еще надо добавить?
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.08.2011, 12:36
ромик0, DevC++ использует gcc mingw, по-этому #pragma comment (lib, "ws2_32.lib"); вам не поможет. Убедитесь, что файл libws2_32.a лежит по указанному пути.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.08.2011, 12:36
Помогаю со студенческими работами здесь

Как правильно написать клиент?
Здравствуйте. Помогите. Имеется сервер который отправляет сообщение или принимает их случайном порядке. Я сделал так но это...

Как написать небольшой клиент-сервер
Ну ни как не получается у меня создать маленький клиент-сервер. Пишу на VB2010. По примерам с форума у меня только здоровенные коды в...

Как написать приложение клиент-сервер?
как написать приложение типа клиент-сервер на Java, поставил Java(TM) Web Services Developer Pack 1.1, в котором есть сервер TomCat....

Как написать клиент-серверное приложение?
Хочу написать такую программу. Есть сервер у меня на компютере и есть клиент на другом компютере. Клиент посылает какую-то строку серверу а...

Как написать клиент-серверное приложение
Доброго времени суток. Создал аналогичную тему в раздете про си++ билдер, но там что-то тишина, может сдесь мне помогут. моя Цель:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru