Передать\принять файл через сокеты в Linux

Тема в разделе "WASM.NETWORKS", создана пользователем Rustem, 13 июл 2006.

  1. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Приветствую
    Киньте плиз исходник язык любой (С, СРР приветствуется)

    Заранее спасибо
     
  2. Bert

    Bert New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    20
    Адрес:
    Russia
    Что-то я не понял, как в новом форуме можно приаттачить файл к сообщению. Потому вот скорее схема, чем готовый пример:
    Sender

    Код (Text):
    1. #define RECEIVER_PORT 65000
    2. int l;
    3. struct sockaddr_in remote;
    4. size_t i;
    5. l = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    6. remote.sin_family = AF_INET;
    7. remote.sin_port = htons(RECEIVER_PORT);
    8. remote.sin_addr.s_addr = htonl(...);
    9. connect(l, (struct sockaddr*)&remote, sizeof(struct sockaddr_in));
    10. send(l, buf, buflen, 0);
    11. close(l);
     
  3. Bert

    Bert New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    20
    Адрес:
    Russia
    Receiver
    Код (Text):
    1. #define RECEIVER_PORT 65000
    2. unsigned char buf[] = { 0, 0, 0, 0 };
    3. size_t buflen = sizeof(buf);
    4. int l, r;
    5. struct sockaddr_in local, remote;
    6. socklen_t remote_size;
    7. ssize_t n, i;
    8. l = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    9. local.sin_family = AF_INET;
    10. local.sin_port = htons(RECEIVER_PORT);
    11. local.sin_addr.s_addr = htonl(INADDR_ANY);
    12. bind(l, (struct sockaddr*)&local, sizeof(struct sockaddr_in))
    13. listen(l, SOMAXCONN);
    14. memset(&remote, 0, sizeof(remote));
    15. remote_size = sizeof(remote);
    16. r = accept(l, (struct sockaddr*)&remote, &remote_size);
    17. close(l);
    18. for (n = recv(r, buf, buflen, 0); n > 0; n = recv(r, buf, buflen, 0)) {
    19.     /* Now we have next n incoming bytes.
    20.         Do with them whatever you need. */
    21.     ...
    22. }
    23. if (n < 0)
    24.     perror("recv() failed");
    25. close(r);
     
  4. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Скинь мне исходник на мыло пожалуйста rfasihovDOGmail.ru
     
  5. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Bert
    Приаттачить файл можно в форме полного ответа (ссылка "Ответить" внизу справа каждого поста или треда).
     
  6. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Вроде сам сделал.

    Появлися еще один вопрос...
    Допустим я отослал данные через send(....)
    Как потом правильно принять другие данные через recv(..), или наоборот
    Что то не получается
     
  7. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Rustem
    Я делал свои пакеты. Посмотри здесь http://www.wasm.ru/forum/viewtopic.php?id=12328
     
  8. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    Rustem

    в инете есть очень хорошая книга, которая как нельзя в полной мере отражает архитектуру сокетов в Unix, а так же блокирующие, не блокирующие, асинхронные и не асинхронные сокеты и т.д. Я думаю после прочтения ее, все твои проблем отпадут. Короче в ней тыша с лишним страниц и имя ей: Ричард Стивенс "UNIX: разработка сетевых приложений". На natahaus.ru она имеется.

    Так же вышла редакция оной в которой были учтены последние нововведения(про это на piter.com), которую можно только купить
     
  9. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Спасибо !!!