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

Подвисает accept

20.11.2014, 19:36. Показов 931. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

У меня сокетный сервер написан на С++, а клиент на Java. Все прекрасно работает на Windows 8. Поставил систему на Windows 7 и уперся в проблему, не могу установить соединение с сокетом.

Клиент на Java:
Java
1
2
3
InetAddress ipAddress = InetAddress.getByName("127.0.0.1");
Socket socket = new Socket(ipAddress, 1111);
System.out.println("Client socket created");
Серевер на С++:
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
WORD sockVer;
WSADATA wsaData;
int retVal;
sockVer = MAKEWORD(2,2);
retVal = WSAStartup(sockVer, &wsaData);
wcout << "retVal=" retVal << "\n" << flush;
 
//Создаем сокет
SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (servSock == INVALID_SOCKET) errExit(L"Unable to create socket");
 
SOCKADDR_IN sin;
sin.sin_family = PF_INET;
sin.sin_port = htons(1111);
sin.sin_addr.s_addr = INADDR_ANY;
 
retVal = bind(servSock, (LPSOCKADDR)&sin, sizeof(sin));
if (retVal == SOCKET_ERROR) errExit(L"Unable to bind");
 
//Пытаемся начать слушать сокет
retVal = listen(servSock, 10);
if (retVal == SOCKET_ERROR) errExit(L"Unable to listen");
 
//Ждем клиента
wcout << "Waiting for the new client\n" << flush;
SOCKET clientSock = accept(servSock, NULL, NULL);
wcout << "Accept is done\n" << flush;
Происходит следующее:
  • Java клиент распечатывает "Client socket created", эксепшоны не выкидывает, т.е. считает, что приконектился к сокету нормально
  • С++ сервер распечатывает "Waiting for the new client", но не распечатывает "Accept is done", т.е. висит на команде accept и не видит никаких клиентов
  • Запущенный сервер пингуется по порту 1111
  • Перекомпилировал С++ сервер на Windows 7 местной студией, ничего не изменилось

Что еще можно предпринять в этой ситуации? Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2014, 19:36
Ответы с готовыми решениями:

accept
DWORD WINAPI ThreadNetworkAdminSystem(StructurNetworkAdminData &amp;data) { StructurClientData...

accept
Можно ли как то устанавливать тайм-аут для этой функции ?

Молчание accept
Пытаюсь написать клиент-сервер.Все компилируется,но не реагирует Сервер #include &quot;stdafx.h&quot;...

на accept() зависает
Доброго времени суток, делаю чат на основе win socket в консольном варианте всё работает, делаю в...

4
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
20.11.2014, 19:42 2
Не знаток Java, но где в этом коде установка соединения клиентом ?
Я ничего, кроме создания сокета, не вижу.

Добавлено через 1 минуту
И еще попробуйте вместо INADDR_ANY явно задать адрес сервера.
И зайти на него, к примеру, из браузера, набрав в адресной строке:
http://127.0.0.1:1111/
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 6
20.11.2014, 20:14  [ТС] 3
Я так понимаю, что Socket socket = new Socket(ipAddress, 1111); - это оно и есть. Потому что дальше в Java клиенте делается следующее:

Java
1
2
DataInputStream in = new DataInputStream(socket.getInputStream());
byte b = in.readByte();
Т.е. клиент уже читает данные с сервера. Ну и не забудем тот факт, что на Windows 8 все отлично работает. Возможно, проблема не в разных ОС, а просто в разных компьютерах.

Добавлено через 30 минут
И еще попробуйте вместо INADDR_ANY явно задать адрес сервера.
И зайти на него, к примеру, из браузера, набрав в адресной строке:
http://127.0.0.1:1111/
Помогло, заработало! Спасибо.
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
20.11.2014, 20:50 4
Цитата Сообщение от snow_max Посмотреть сообщение
Возможно, проблема не в разных ОС, а просто в разных компьютерах.
Я больше скажу: возможно, проблема не в ОС и не компьютерах, а (о, ужас!) в
написанном коде !
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
21.11.2014, 04:58 5
http://download.java.net/jdk7/... etAddress)

Обязательно должен быть connect()
0
21.11.2014, 04:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2014, 04:58
Помогаю со студенческими работами здесь

Функция accept
Здравствуйте уважаемые программисты! Помогите разобраться с основами. Вот я на основе этой статьи...

accept не соединяет
#include &quot;stdafx.h&quot; #include &lt;winsock2.h&gt; #include &lt;windows.h&gt; const int WM_SERVER_ACCEPT =...

Accept, адрес сервера
Доброго всем дня! подскажите, не хватает тяму додуматься - есть сервер, доступен по нескольким...

Accept не ждет ответа
Добрый вечер,случилось горе после передачи списка(клиент серверу),клиент должен получить ответ от...

Что возвращает функция accept()?
Пишу программу с реализацией сокетов. При изучении столкнулся с непониманием алгоритма. Если...

Может ли accept не давать потоку выполняться?
делаю клиент-серверное приложение на winsock2 (TCP) и появилась проблема, что после успешного...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru