Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> несколько вопросов по программированию TCP/IP 
:(
    Опции темы
seravr
Дата 7.2.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



Цитата(SVN74 @ 7.2.2009,  22:18)
Попробуй еще так:
while((reccode=recv(sock,pbuff,sizeof(buff),0)) && reccode !=SOCKET_ERROR)
В клиенте тоже надо заменить на send(sock,&buff[0],sizeof(buff),0)
ОООО . 
А как он у тебя коннетится??? (addr.sin_addr.s_addr=htonl(INADDR_LOOPBACK) - > надо указать реальный адрес 127.0.0.1

по-моему константа INADDR_LOOPBACK-это и есть 127.0.0.1

Добавлено через 1 минуту и 40 секунд
Ребята, а как быть с этими вопросами???

еще хочу у Вас спросить, какие классы есть для работы с сокетами в майкрософт вижал студии 

2008, что посоветуете почитать про программирование сокетов под виндовс(подскажите хорошую 

книжку), какие там используются функции и как программирование сокетов организовать с 

объектно-ориентированной моделью программирования 
PM MAIL   Вверх
seravr
Дата 7.2.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



не помогло.

в чем же ошибка?
PM MAIL   Вверх
vinick
Дата 7.2.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Код

 int sockfd; //<--
 if((sockfd=accept(sock,(struct sockaddr*)&addr,sizeof(addr)))<0) //<--
        puts("состояние ожидания");
    puts("запрос получен");
    int reccode=0;
    while((reccode=recv(sockfd,pbuff,sizeof(buff),0))>0) //<--
    {
        n+=reccode;
        printf("\n%d\n", reccode);
    }
   close(sockfd);



man 2 accept
И вобще у тебя получается что сервер читает данные независимо от того как завершился accept
PM MAIL ICQ Jabber   Вверх
seravr
Дата 7.2.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



спасибо Вам ОГРОМНОЕ, сейчас пойду пробовать.

а скажите пожалуйста что такое "man 2"?

Добавлено через 4 минуты и 8 секунд
Друзья, посоветуйте пожалуйста литературу, по которой Вы учились, мне очень охота программировать сокеты под вижал студию, а как и что там-я не знаю, изучаю все под LINUX? а очень охота под WINDOWS
PM MAIL   Вверх
SVN74
Дата 8.2.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



Цитата(seravr @  7.2.2009,  23:45 Найти цитируемый пост)
Друзья, посоветуйте пожалуйста литературу, по которой Вы учились, мне очень охота программировать сокеты под вижал студию, а как и что там-я не знаю, изучаю все под LINUX? а очень охота под WINDOWS 


"Йон Снейдер Эффективное программирование TCP/IP"

PM MAIL WWW   Вверх
seravr
Дата 8.2.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



Цитата(SVN74 @ 8.2.2009,  00:13)
[QUOTE"Йон Снейдер Эффективное программирование TCP/IP"


спасибо Вам, но там тоже ведь под Linux

Это сообщение отредактировал(а) seravr - 8.2.2009, 00:38
PM MAIL   Вверх
vinick
Дата 8.2.2009, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Цитата(seravr @  7.2.2009,  23:45 Найти цитируемый пост)
а скажите пожалуйста что такое "man 2"?

Это я по привычке написал smile В переводе на русский это оозначает "Смотри документацию на функцию accept"

Цитата(seravr @  8.2.2009,  00:29 Найти цитируемый пост)
Цитата(SVN74 @ 8.2.2009,  00:13)
[QUOTE"Йон Снейдер Эффективное программирование TCP/IP"


спасибо Вам, но там тоже ведь под Linux

Нет, автор старался, чтобы книга была полезна и программистам под Windows.
Так что ее можно смело читать.

Цитата(seravr @  7.2.2009,  22:29 Найти цитируемый пост)
еще хочу у Вас спросить, какие классы есть для работы с сокетами в майкрософт вижал студии 

Есть C++ библиотека asio. Не так давно она вошла в состав Boost, но ее можно использовать и отдельно. библиотека содержит только h-файлы и может работать с VC++ .
PM MAIL ICQ Jabber   Вверх
seravr
Дата 8.2.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



vinick и SVN74, спасибо Вам огромное, программа заработала после того как я изменил аргументы в функции accept(sock,(struct sockaddr*)&addr,sizeof(addr)), где второй и третий аргумент я заменил на NULL. прога сразу начала принимать вызов от клиента. С чем это связано- не пойму, не помогите разобраться пожалуйста.
И еще хочу спросить, когда я  в терминале запускаю сначала сервер ./server& а потом ./client, то сервер не откликается с первого раза на вызов клиента и никак не реагирует, а когда я опять вызываю ./client, то сервер нормально работает, вообщем сервер начинает отвечать только со второго вызова клиента, подскажите почему?
PM MAIL   Вверх
Олег2005
Дата 9.2.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 1
Всего: 11



Виндовс
12.    Оланд Д., Джонс Э. Программирование в сетях Microsoft Windows , ISBN: 5-318-00725-2 издательство "Питер", 2002 
28.    Jones A., Ohlund J., Ohlund Jim Network Programming for Microsoft Windows, Second Edition Microsoft Press, February 13, 2002 ISBN: 0735615799 

Вторая книга есть только на английском.
Русской версии не видел
PM MAIL WWW MSN   Вверх
MAKCim
Дата 9.2.2009, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(seravr @  8.2.2009,  12:03 Найти цитируемый пост)
С чем это связано- не пойму, не помогите разобраться пожалуйста.

читать эу книгу
тут

цены в белорусских рублях, так что не пугайтесь

Добавлено через 57 секунд
Цитата(seravr @  8.2.2009,  12:03 Найти цитируемый пост)
подскажите почему? 

еще раз выложи сюда полный код приложения


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
seravr
Дата 9.2.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



Олег2005 и MAKCim, спасибо Вам огромное, сейчас буду читать.
Ребята, а никто не знает почему так:
...программа заработала после того как я изменил аргументы в функции accept(sock,(struct sockaddr*)&addr,sizeof(addr)), где второй и третий аргумент я заменил на NULL. прога сразу начала принимать вызов от клиента. С чем это связано- не пойму, не помогите разобраться пожалуйста.
И еще хочу спросить, когда я  в терминале запускаю сначала сервер ./server& а потом ./client, то сервер не откликается с первого раза на вызов клиента и никак не реагирует, а когда я опять вызываю ./client, то сервер нормально работает, вообщем сервер начинает отвечать только со второго вызова клиента, подскажите почему?
PM MAIL   Вверх
MAKCim
Дата 9.2.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



seravr, 
Цитата(MAKCim @  9.2.2009,  09:28 Найти цитируемый пост)
еще раз выложи сюда полный код приложения 




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
seravr
Дата 9.2.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



Код

-------------client------------
#include<stdio.h>
#include<string.h>
#include<sys/types>
#include<sys/socket>
#include<netinet/in.h>

int main()
{
    char buff[]="send";
    char* pbuff=buff;

    int sock=0;
    struct sockaddr_in addr;
    sock=socket(PF_INET,SOCK_STREAM,0);
    if(sock<0)
        puts("сокет не создан");
    else 
        puts("сокет создан");
    addr.sin_family=AF_INET;
    addr.sin_port=htons(3425);
    addr.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
    if((connect(sock,(struct sockaddr*)&addr,sizeof(addr)))<0)
        puts("ошибка подключения к серверу");
    else
        puts("подключились к серверу");
    if((send(sock,pbuff,sizeof(buff),0))<0)
        puts("ошибка отправки сообщения");
    else 
        puts("сообщение серверу отправлено");

    close(sock);
    return 0;
}


Код

------------server-------------
#include<stdio.h>
#include<string.h>
#include<sys/types>
#include<sys/socket>
#include<netinet/in.h>

int main()
{
    char buff[100];
    char* pbuff=buff;

    int sock=0,n=0;
    struct sockaddr_in addr;
    sock=socket(PF_INET,SOCK_STREAM,0);
    if(sock<0)
        puts("сокет не создан");
    else 
        puts("сокет создан");
    addr.sin_family=AF_INET;
    addr.sin_port=htons(3425);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);

    if((bind(sock,(struct sockaddr*)&addr,sizeof(addr)))<0)
    {
        puts("функция bind() не сработала");
        exit(1);
    }
    if((listen(sock,5))<0)
    {
        puts("функция listen() не сработала");
        exit(2);
    }
    else
        puts("сервер переведен в пассивный режим");
    int newSocket=0;
    while(1)
    {
        if((newSocket=accept(sock,0,0))<0)
            puts("состояние ожидания");
        else 
        {
            puts("запрос получен");
            int reccode=0;
            while((reccode=recv(sock,pbuff,sizeof(buff),0))>0)
            {
                n+=reccode;
            }
        
            buff[n]='\0';
            if(reccode<0)
                perror("socket:");
            puts(pbuff);//выводим принятую строку
            close(newSocket);
        }
    }
    close(sock);
    return 0;
}

PM MAIL   Вверх
vinick
Дата 9.2.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Код

  while((reccode=recv(newSocket,pbuff,sizeof(buff),0))>0) //!!!!!


и анализируй errno в случае ошибок. полезно.
PM MAIL ICQ Jabber   Вверх
seravr
Дата 9.2.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 3.1.2009

Репутация: нет
Всего: нет



хорошо, спасибо Вам
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.