|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.12.2012, 04:02 | #1 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
Клиент-серверный чат на неблокируемых сокетах (winsock 1)
Здравствуйте, Форумчане! Прошу помощи. Не могу вкурить я в winsock никак. Общарил интернет, читал статьи, но до конца так и не понял. Нужно было создать чат. Клиент посылает, сервер принимает и выводит. Но при отправке почему-то приложение-клиент подвисает, а функция recv в приложении-сервере возвращает "-1".
Не пойму в чем дело. Вот коТ сервера: PHP код:
PHP код:
Заранее благодарен за помощь всем, кто откликнется.
Если помог, проси поставить минус. Будь оригинален!
Последний раз редактировалось Rin; 17.12.2012 в 04:18. Причина: В 4 утра, не спав сутки, становишься бескулюторным. Исправил сие недоразумение. |
17.12.2012, 07:26 | #2 |
Далеко не
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,512
|
Код:
|
17.12.2012, 10:41 | #3 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
1. Клиент у тебя в блокирующем режиме, он по дефолту, а иначе ты не указал
2. У тебя сервер ничего не отправляет (нету Send), вот клиент и подвисает (т.к. в блокирующем режиме) на if Recv(S,buf,Sizeof(buf),0)<=0 then сервер -котгавно... клиент на тройку
Не стесняемся, плюсуем!
|
17.12.2012, 12:25 | #4 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
А зачем серверу что-то отправлять, если он просто ждет данных клиентов? Брал пример из Delphi Russian Knowledge Base 3, пример был для консольки, но работал!
То, что мои коты-выкидыши попахивают, знаю. Первый блин всегда комом. Но мне кажется, что не из-за этого виснет, т.к. в примере из Delphi Russian Knowledge Base 3 нет никаких send на сервере, есть только recv. Код:
Если помог, проси поставить минус. Будь оригинален!
Последний раз редактировалось Rin; 17.12.2012 в 12:34. |
17.12.2012, 12:45 | #5 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
если сервер ничего не отправляет зачем клиенту Recv?
Не стесняемся, плюсуем!
|
17.12.2012, 12:51 | #6 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
Спасибо, Slym. Вот моя невнимательность и невыспанность. Перестало виснуть. Но все равно recv на сервере возвращает -1 (Socket_error).
Update Есть предположение, что блкирующий и неблокирующий сокеты не взаимодействуют друг с другом. Но в клиенте при переводе сокета в неблокирующий режим при коннекте возникает ошибка 10035 (WSAEWOULDBLOCK).
Если помог, проси поставить минус. Будь оригинален!
Последний раз редактировалось Rin; 17.12.2012 в 14:10. |
17.12.2012, 14:40 | #7 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
Все, разобрался, не хватало функции Accept для создания обслуживающего соединение сокета. Теперь все передает. Slym, благодарю за наводку по recv в клиенте.
Если помог, проси поставить минус. Будь оригинален!
|
17.12.2012, 17:29 | #8 | |
Форумчанин
Регистрация: 11.04.2012
Сообщений: 212
|
Цитата:
Взаимодействующие стороны ничего не знают, знать не могут и знать не обязаны о режиме работы сокетов друг у друга. |
|
17.12.2012, 17:44 | #9 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
Это я уже понял. Но возникла другая проблема. Соединение рушится после того как произошла отсылка данных от клиента и принятие данных сервером. Почему это может быть?
Если помог, проси поставить минус. Будь оригинален!
|
17.12.2012, 17:50 | #10 |
Форумчанин
Регистрация: 11.04.2012
Сообщений: 212
|
Оно "рушится" потому что одна из сторон по собственной инициативе его "рушит"
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Telnet клиент на сокетах | an1s1 | Общие вопросы .NET | 1 | 19.07.2012 17:38 |
Статья: Низкоуровневое сетевое программирование. Пишем клиент/серверное приложение на сокетах Беркли | oleg kutkov | C/C++ Сетевое программирование | 42 | 22.01.2011 00:35 |
Чат на сокетах | yandzee | Общие вопросы C/C++ | 6 | 11.12.2010 14:50 |
Простейшие клиент-сервер на сокетах: почему ошибка 10060 | kolchakA | Общие вопросы C/C++ | 7 | 01.12.2009 08:14 |