Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему проходит только одна посылка send?  (Прочитано 7904 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« : 27-06-2006 07:48 » 

Есть сервер, уже отлаженый 

Открывает порт ловит входящие акцептирует и передает акцептированый сокет другому потоку который ведет по нему обмен.

Есть клиент на бейсике котрый через компонент winsock2 нормально сним работает...

Теперь хочу сделать сишый клиент и имею трабл конектися, сервер акцептирует, первая посылка проходит и все ни каких ошибок, клиент через send чесно каждые 10 секунд продолжает посылать запросы но на сервере они не приходят ( не возникает события ).
Инициация сокета
Код:
SOCKET CDLS_DAC::OpenAndConnect(CString ServerName, int Port, int SocketType) 
{
SOCKET ConnSocket;
    LPHOSTENT hp;
    SOCKADDR_IN ServerAddr;
    ConnSocket = socket(AF_INET, SocketType, IPPROTO_TCP); /* Open a socket */
    if (ConnSocket <0 ) {
        return INVALID_SOCKET;
    }

    memset(&ServerAddr, 0, sizeof(ServerAddr));
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons(Port);

   /* if (isalpha(ServerName[0])) {   
        hp = gethostbyname(ServerName);
        if (hp == NULL) {
            return INVALID_SOCKET;
        }
        ServerAddr.sin_addr.s_addr = hp->h_addr;
    } else {
*/
        ServerAddr.sin_addr.s_addr = inet_addr(ServerName);
   // } acsept

if (connect(ConnSocket, (LPSOCKADDR)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
{
        closesocket(ConnSocket);
        return INVALID_SOCKET;
    }
send(   this->sSoc ,(char *)&p_Pak,sizeof dls_Query_Pak ,0);
    return ConnSocket;

Код:
while (isRun)
{
sSoc=OpenAndConnect(Server_IP,Server_Port,SOCK_STREAM);
if(sSoc !=INVALID_SOCKET)
{



isConnect=true;

while (isConnect)
{
int i;
//.....  Сборка пакета
if(send(   this->sSoc  ,(char *)&m_Pak,sizeof dls_Query_Pak ,0)==SOCKET_ERROR )
{
int d=WSAGetLastError();
printf("\n\nDAC Socket Error [%d]\n",d) ;
     isConnect=false

}

WFSO(Ev,10000)/// задержка на 10 мин
}


}

}
Записан

Да да нет нет все остальное от лукавого.
sss
Специалист

ru
Offline Offline

« Ответ #1 : 05-07-2006 00:33 » 

Чему равен?

Код:
sizeof dls_Query_Pak
Записан

while (8==8)
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 05-07-2006 01:23 » 

У тебя в функции OpenAndConnect() и сейчас стоит send() в конце, или это опечатка? Т.е. приконнектился и сразу послал? Если это так - то похоже только он и срабатывает, тогда смотри функцию сбора пакета и его отправки. Чудес не бывает... И еще sss прав - таких записей не бывает. Уточни свой код, непонятно какие ошибки в нем есть на самом деле, а какие внесены сейчас Улыбаюсь
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
sss
Специалист

ru
Offline Offline

« Ответ #3 : 05-07-2006 02:54 » 

Да, если dls_Query_Pak это макрос, то, возможно, мы видим побочный эффект о котором так долго говорили большевики ...
Записан

while (8==8)
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 05-07-2006 03:58 » 

Нет dls_Query_Pak это структура ,

OpenAndConnect()  стоит send()  для того чтобы сразу произошол конект, почемуто при такой реализации сокет не открывается(на сервер не приходит запрос и не происходит аксерта) до того момента как через него не будет предпринята попытка послать данные.

А вообще проблема решена,
причина сбоя : при причесовании кода  исщез  комент с
WFSO(hMutex,1000);//wait for single object

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

Записан

Да да нет нет все остальное от лукавого.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines