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

Простейшие клиент-сервер на сокетах: почему ошибка 10060

28.11.2009, 01:07. Показов 8785. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попытался реализовать простейшие клиент и сервер на сокетах. Оба - клиент и сервер работают на моем компьютере. Сервер открывает соединение для любого ip адреса и ждет подключения, клиенту для подключения при отладке задаю внешний ip адрес своего компа (внешний ip получаю любым онлайн сервисом по определению ip - или просто набираю в яндексе "мой ip"). Но при подключении функция connect около полуминуты ждет, а потом возвращает ошибку: 10060(ошибка соединения с сервером).

На компе установлен Каспер и Outpost (пробовал даже их отключать, все-равно не работает).

Ниже привожу код клиента и сервера.
Клиент:
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
WSADATA lpWSAData;
        SOCKET my_sock;
    
    int port_num=3333;
    int errorsock;
    char*buff=new char(512);
    if (WSAStartup(MAKEWORD(1,1),&lpWSAData)!=0)
    { 
        MessageBox(0,"WSAStartup ERROR","ERROR",0);
        return(NULL);
    }
 
    my_sock=socket(AF_INET, SOCK_STREAM, 0);
        if (my_sock==INVALID_SOCKET) {
        MessageBox(0,"Socket creation ERROR","ERROR",0);
        WSACleanup();
        return(NULL);
        }
 
       sockaddr_in dest_addr;
       dest_addr.sin_family = AF_INET;
       dest_addr.sin_port = htons(port_num);
       dest_addr.sin_addr.s_addr = inet_addr("94.178.65.158"); //мой ip
 
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
       {
                errorsock=WSAGetLastError();
        MessageBox(0,"ERROR connecting","ERROR",0);
        closesocket(my_sock);
        WSACleanup();
                return(NULL);
        }
    
      
    send(my_sock,"Hello",128,0);
    
    closesocket(my_sock);
    WSACleanup();
Сервер:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &wsaData); 
        SOCKET listet_Sock = socket(AF_INET,SOCK_STREAM,0); 
 
    SOCKADDR_IN addr_Sock;
 
    addr_Sock.sin_family = AF_INET;
 
    addr_Sock.sin_addr.s_addr = htonl(INADDR_ANY);
 
    addr_Sock.sin_port = htons(3333); 
    
        if(bind(listet_Sock,(LPSOCKADDR)&addr_Sock, sizeof(struct sockaddr))) return 0; 
 
    if(listen(listet_Sock, 1)) return 0; 
 
    
    char type[2], buf[126];
 
    SOCKET sock = accept(listet_Sock,0,0);
 
       //Здесь начинается ожидание
Подскажите, в чем проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2009, 01:07
Ответы с готовыми решениями:

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

Простой сервер-клиент на сокетах
В сокетах ещё новичок прошу строго не ругать, моя первая попытка написать что-то. Собственно проблема заключается в том, что при...

Чат клиент-сервер на сокетах
и все таки появилась еще одна проблема раньше все сообщения от клиентов просто оставались на сервере теперь я хотел бы чтобы сервер...

4
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
28.11.2009, 01:33
Если через локальный хост коннект проходит, а через внешний адрес нет, тогда проблема наверняка в "сером" айпишнике.
0
0 / 0 / 0
Регистрация: 27.11.2009
Сообщений: 5
28.11.2009, 10:05  [ТС]
Цитата Сообщение от Gravity Посмотреть сообщение
Если через локальный хост коннект проходит, а через внешний адрес нет, тогда проблема наверняка в "сером" айпишнике.
Да, кстати, если использую ip 127.0.0.1, то все работает. Но внешний у меня тоже не "серый") - 94.178.63.148 (хотя точно скажу что динамический, но это роли не играет, так как перед отладкой я каждый раз его проверяю).

Что касается серых, то я так понимаю они только в диапазонах:

* 10.0.0.0 - 10.255.255.255
* 172.16.0.0 - 172.31.255.255
* 192.168.0.0 - 192.168.255.255

Добавлено через 31 минуту
Цитата Сообщение от kolchakA Посмотреть сообщение
Да, кстати, если использую ip 127.0.0.1, то все работает. Но внешний у меня тоже не "серый") - 94.178.63.148 (хотя точно скажу что динамический, но это роли не играет, так как перед отладкой я каждый раз его проверяю).

Что касается серых, то я так понимаю они только в диапазонах:

* 10.0.0.0 - 10.255.255.255
* 172.16.0.0 - 172.31.255.255
* 192.168.0.0 - 192.168.255.255
Я вот уже думаю, может у меня на машине запрещен удаленный доступ к определенному диапазону портов? (хотя как тогда серверу удается начать прослушить запрещенный порт...?)
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
28.11.2009, 17:45
Ну а accept разве работает, в блокирующем режиме? Я всегда писал
Code
1
2
3
4
5
while(connected<=10)
{
    newsocker = accept(socket, (sockaddr*)&addr, &len);
    ++connected;
}
Возможно оно просто срабатывает, а потом перестает принимать запросы.
И параметров вроде не хватает.
Code
1
accept(listet_Sock,0,0);
0
0 / 0 / 0
Регистрация: 27.11.2009
Сообщений: 5
01.12.2009, 08:32  [ТС]
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
Ну а accept разве работает, в блокирующем режиме? Я всегда писал
Code
1
2
3
4
5
while(connected<=10)
{
    newsocker = accept(socket, (sockaddr*)&addr, &len);
    ++connected;
}
Возможно оно просто срабатывает, а потом перестает принимать запросы.
И параметров вроде не хватает.
Code
1
accept(listet_Sock,0,0);
Вот что пишут про accept:
Сервер: шаг пятый - извлечение запросов на соединение из очереди осуществляется функцией "SOCKET accept (SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen)", которая автоматически создает новый сокет, выполняет связывание и возвращает его дескриптор, а в структуру sockaddr заносит сведения о подключившемся клиенте (IP-адрес и порт). Если в момент вызова accept очередь пуста, функция не возвращает управление до тех пор, пока с сервером не будет установлено хотя бы одно соединение. В случае возникновения ошибки функция возвращает отрицательное значение.
а почему параметров не хватает? Нули я поставил, потому как мне не требуется сохранять инфу о входящем соединении.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2009, 08:32
Помогаю со студенческими работами здесь

Клиент-сервер на сокетах на разных машинах
Всем здравствовать! Не могу справиться с казалось бы простой задачей. А именно - передать строку символов с одного компьютера на другой...

Сервер-клиент на сокетах: при отправке второго сообщения, программа падает
Сервер: uses Sockets, CRT; var Fromname: array of char; Buffer,oldbuff,buff,UN: string; S:Longint; Sin,Sout:text; ...

Почему не работает сервер на сокетах?
Подскажите, что не так, почему не работает? Клиент: using System; using System.Collections.Generic; using System.Linq; using...

Сервер на сокетах: Нельзя повторно отправить данные на сервер
Делаю сервер на сокетах. Первая отправка данных на сервер проходит успешно, сервер получает и отвечает. Но повторный вызов события приводит...

Сервер на сокетах: невозможно повторно запустить сервер
пишу сервер на сокетах, но надо не в консоли, а на Windows Forms, значит по кнопке у меня сервер стартует, на кнопке я пишу помимо прочего...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru