Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для el Gato Estelar
9 / 9 / 1
Регистрация: 26.05.2010
Сообщений: 36

Вопрос по сокетам

02.08.2010, 13:52. Показов 1635. Ответов 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
    WSADATA wsaData;
    WORD wVersion = MAKEWORD(2, 2);
    WSAStartup( wVersion, &wsaData );
    SOCKET sSock = socket( AF_INET, SOCK_STREAM, 0 );
    sockaddr_in saIn;
    saIn.sin_family = AF_INET;
    saIn.sin_port = htons( 3135 );
    saIn.sin_addr.S_un.S_addr = inet_addr( "127.0.0.1" );
    connect( sSock, ( sockaddr* ) &saIn, sizeof( saIn ) );
    string s = argv[1];
    char len = s.length();
    for (int t = 0; t < 2; t++) 
    {
        s = argv[1];
        int iResult = send( sSock, &len, 1, 0 );
        cout << "-------------------->\n";
        cout << "len:" << (int)len << endl;
        cout << "iResult:" << iResult << endl;
        iResult = send( sSock, s.c_str(), s.length(), 0 );
        cout << "s:" << s.c_str() << endl;
        cout << "iResult:" << iResult << endl;
        cout << "-------------------->\n";
    }
пример тестовый. суть в том, что я подключаюсь клиентом к серверу на локальной машине и периодически шлю ему какие то данные, в данном случае 2. Но сервер принимает только первую "порцию". т.е. длину и параметр командной строки.
Клиент выдаёт:
------------------>
len:3
iResult: 1
s: asd
iResult: 3
------------------>
------------------>
len:3
iResult: 1
s: asd
iResult: -1
------------------>

И вот это я не понять и не могу, отчего возникает ошибка при повторной отправке? данные валидные, пробовал отключать отправку у сокета(через shutdown) и подключаться ещё раз -- не помогло. Чем это может быть вызвано?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2010, 13:52
Ответы с готовыми решениями:

Вопрос по сокетам
У меня есть два вопроса по сокетам. 1. Как с помощью сокетов скачать файл по HTTP и FTP 2. Как с помощью сокетов отправить письмо по...

Простой вопрос по сокетам
Сервер отправляет несколько сообщений в цикле n=pBox-&gt;GetCount(); for (i=0; i&lt;n; i++) { pBox-&gt;GetText(i, s); ...

учебник по сокетам
Подскажите какую-нибудь книжку/учебник по сокетам в windows. Желательно чтобы простым и понятным языком написана была. Заранее спасибо. ...

5
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.08.2010, 11:43
проверь сервер
0
 Аватар для el Gato Estelar
9 / 9 / 1
Регистрация: 26.05.2010
Сообщений: 36
03.08.2010, 11:46  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SOCKET sTemp;
while ( INVALID_SOCKET != ( sTemp = accept( sSock, 0, 0 ) ) )
{
    cout << "------------------------>\n";
    cout << "Connected...";
    char n = 0;
    recv( sTemp, &n, 1, 0 );
    cout << "Received:" << n << endl;
    cout << "Sending..." << endl;
    send( sTemp, &n, 1, 0 );
    cout << "Data:" << n << endl;
    closesocket( sTemp );
    cout << "------------------------->\n";
 
}
до этого создал и забиндил sSock.
0
Заблокирован
03.08.2010, 11:57
я пишу на VB, но идея такова:
назначаешь серверу локальный порт(IP не нужен)
ставишь его на прослушку, типа .Listen
в обработчике событий на поступление новых данных (типа DataArrival) вызываешь .GetData и обрабатываешь данные, что пришли
0
 Аватар для el Gato Estelar
9 / 9 / 1
Регистрация: 26.05.2010
Сообщений: 36
03.08.2010, 13:04  [ТС]
спасибо конечно, но вопрос был не в том, как реализовать клиент-сервер, а почему он не может с одного сокета вытянуть данные больше одного раза. И, да, я делаю точно так же, просто весь код сервера приводить не стал - там, где биндится сокет и ставится на прослушку. Возможно, действительно дело в сервере, в цикле обработки сообщений, только я не могу понять, что именно не так.

Добавлено через 1 час 3 минуты
Вобщем, понял я, в чём была ошибка. Если кому интересно -- когда сокет соединения выдёргивается из очереди accept'ом, он уже туда больше не попадёт, даже если данные будут отправляться. Поэтому, я выдернув его оттуда, прочитал в цикле только первое сообщение, а потом "зависал" на ожидании новых подключений accept'ом.
Попробовал делать через привязки треда к каждому коннекту -- всё заработало нормально, читаются все сообщения
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.08.2010, 03:39
accept принимает несколько подключений, если подключение одно, делать accept в цикле не надо
а подключение - это connect()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2010, 03:39
Помогаю со студенческими работами здесь

Рассылка по сокетам
Доброго времени суток. Есть один многопользовательский сервер, что-то вроде FTP и соответственно клиент для него. Необходимо при каждом...

Литература по сокетам
Доброго времен суток! Уважаемые посетители cyberforum! Посоветуйте пожалуйста литературу по программированию сокетов в С++ Заранее...

Учебники по сокетам
Ребят, подскажите хорошие книги для изучения сокетов.

Учебник по сокетам
Здравствуйте господа. Дайте пожалуйста ссылки на учебники по сокетам (если важно пишу на C++/C#)

Учебник по сокетам
можете подсказать какой нибудь учебник про всякие сокеты или винсок? не смог найти..(


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Перейдите по ссылке:. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru