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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ANY] Компьютерные сети, написать TFTP клиент программу 
:(
    Опции темы
KatrinIceLand
Дата 25.1.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Интересная тема курсовой, но для меня совершенно незнакомый предмет компьютерные сети, протоколы и порты всякие, но буду разбираться.

Я конечно надеюсь сама справиться с курсовой, но в помощи и объяснениях нуждаюсь.

Ближе к теме. Задание такое: 

Протокол TFTP используется для передачи и получения файлов между компами. Он использует port 69 через  UDP соответственно. 

Я должна написать TFTP client программу (для сервера не надо) язык любой: лучше JAVA или C++ и протестировать ее загрузив server (http://www.tftp-server.com/tftp-client.html).

Дальше самое интересное:

TFTP server программа работает на компе преподавателя. Она еще и multithreaded - что значит многоканальный доступ. Если мы сможем написать программу клиент которая будет multithreaded - тогда я получу полный балл, но это не обязательно. 

Так вот мне известен IP преподавателя и после написания клиента надо изменить файлы на сервере препода. Насколько я понимаю это делается в .doc. А вот какими командами я не знаю, поэтому мне и нужна помощь с вашей стороны.

Те кто добывал инфо этим способ должен знать о чем я говорю, так как здесь все точно так же только легально  smile 

Буду рада любым советам по моим вопросам и любой помощи!
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Snowy
Дата 25.1.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



PM MAIL   Вверх
KatrinIceLand
Дата 25.1.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Snowy @  25.1.2008,  16:25 Найти цитируемый пост)
RFC TFTP: http://www.faqs.org/rfcs/rfc783.html 


Спасибо! 

С теорией все более или менее понятно, у меня очень хороший учебник есть, там я тоже много чему научилась. А вот с практической стороны не совсем все понятно.  У меня еще целая неделя впереди, так что я только открыла пока эту тему. 

Свои наброски выложу как только будет что-то что можно показать  smile , но ваша помощь мне наверняка понадобится как все это вместе собрать и изменить файлы на компе у преподавателя.
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Kangaroo
Дата 25.1.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



KatrinIceLand, 
код TFTP клиента на Java - тут
библиотека для работы с этим протоколом на Java - тут

Можешь подсмотреть  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
KatrinIceLand
Дата 26.1.2008, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Kangaroo @  25.1.2008,  17:57 Найти цитируемый пост)
Можешь подсмотреть    

Спасибо большое! Буду разбираться.

Тему пока не закрываю, уверена что будут еще вопросы  smile 
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
KatrinIceLand
Дата 29.1.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ничего не получается  smile 

Цитата(Kangaroo @  25.1.2008,  17:57 Найти цитируемый пост)
код TFTP клиента на Java - тут

код совсем не simple и не компилируется..

Помогите написать этот tftp client, pls.
 
И с помощью каких команд в cmd.exe можно соединится с другим копьютером через IP? Как наладить эту связь и изменить файлы на другом компьютере?




--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
APM
Дата 29.1.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как я понял, дополнительных команд cmd.exe тебе не нужно, т.е. запускаешь ту программу на Java, передаешь ей через командную строку параметры и все. 

PM   Вверх
KatrinIceLand
Дата 29.1.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(APM @  29.1.2008,  19:27 Найти цитируемый пост)
запускаешь ту программу на Java

А как ее запустить если она у меня не компиллируется.
В теории все просто, создаем TFTPclient, socket, connection. Но программу написать самостоятельно не получается.

Цитата(APM @  29.1.2008,  19:27 Найти цитируемый пост)
передаешь ей через командную строку параметры и все. 

А можно с примером где "там" командная строка и какие параметры я могу передать. Мне известен только IP другого компьютера (преподавателя).  

Плиз хэлп, скоро сдавать  smile 
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
KatrinIceLand
Дата 30.1.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот что я нашла, посмотрите пожалуйста.  smile 
Вопросы:
Это и есть простой протокол, клиент-программа (в смысле это законченная программа или часть)? 
Я думала главное действие происходит в main?
Кто-нибудь может запутить эту прогу? У меня не получается...

Код

function tftp_fetch($host, $filename)
/*TFTP client*/
  {
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

    // create the request packet
    $packet = chr(0) . chr(1) . $filename . chr(0) . 'octet' . chr(0);
    // UDP is connectionless, so we just send on it.
    socket_sendto($socket, $packet, strlen($packet), 0x100, $host, 69);

    $buffer = '';
    $port = '';
    $ret = '';
    do
    {
      // $buffer and $port both come back with information for the ack
      // 516 = 4 bytes for the header + 512 bytes of data
      socket_recvfrom($socket, $buffer, 516, 0, $host, $port);

      // add the block number from the data packet to the ack packet
      $packet = chr(0) . chr(4) . substr($buffer, 2, 2);
      // send ack
      socket_sendto($socket, $packet, strlen($packet), 0, $host, $port);

      // append the data to the return variable
      // for large files this function should take a file handle as an arg
      $ret .= substr($buffer, 4);
    }
    while(strlen($buffer) == 516);  // the first non-full packet is the last.
    return $ret;
  }





--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
APM
Дата 31.1.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Программа, которую Вы привели написана на языке программирования РНР. Для ее запуска нужен интерпретатор языка РНР.
PM   Вверх
KatrinIceLand
Дата 1.2.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(APM @  31.1.2008,  21:14 Найти цитируемый пост)
Программа, которую Вы привели написана на языке программирования РНР. Для ее запуска нужен интерпретатор языка РНР. 

Понятно. Спасибо за подсказку.

А вот на C# частично написанная программа, если кому-нибудь будет интересно посмотреть. У меня такое впечатление что никто из посетителей этого форума никогда не писал TFTP.
Я сегодня сдаю курсовую. Постараюсь выложить исходник с корректным и законченым кодом после получения балла.

Код

/* TFTPClient*/

using System;
using System.Collections.Generic;
using System.Text;

namespace TFTPClient
{
    public class TFTPClient
    {
        public TFTPClient(string server)
            : this(server, 69)
        {
        }
        
        public TFTPClient(string server, int port)
        {
            Server = server;
            Port = port;
        }

        public void Get(string remoteFile, string localFile, Modes tftpMode) 
        {
           int len = 0;
           int packetNr = 1;
           byte[] sndBuffer = CreateRequestPacket(Opcodes.Read, remoteFile, tftpMode);
           byte[] rcvBuffer = new byte[516];

           BinaryWriter fileStream = new BinaryWriter(new FileStream(localFile, 
               
               FileMode.Create, FileAccess.Write, FileShare.Read));

           IPHostEntry hostEntry = Dns.GetHostEntry(tftpServer);
           IPEndPoint serverEP = new IPEndPoint(hostEntry.AddressList[0], tftpPort);
           EndPoint dataEP = (EndPoint)serverEP;
           Socket tftpSocket = new Socket(serverEP.Address.AddressFamily, SocketType.Dgram,          ProtocolType.Udp);

           // Request and Receive first Data Packet From TFTP Server
           tftpSocket.SendTo(sndBuffer, sndBuffer.Length, SocketFlags.None, serverEP);
           tftpSocket.ReceiveTimeout = 1000 ;
           len = tftpSocket.ReceiveFrom(rcvBuffer, ref dataEP);
                        
           // keep track of the TID 
           serverEP.Port = ((IPEndPoint)dataEP).Port;
           
           while (true) {
           // handle any kind of error 
          if (((Opcodes)rcvBuffer[1]) == Opcodes.Error) {
            fileStream.Close();
            tftpSocket.Close();
            throw new TFTPException(
              ((rcvBuffer[2] << 8) & 0xff00) | rcvBuffer[3],
               Encoding.ASCII.GetString(rcvBuffer, 4, rcvBuffer.Length - 5).Trim('\0'));
          }
          // expect the next packet
          if ((((rcvBuffer[2] << 8) & 0xff00) | rcvBuffer[3]) == packetNr) {
             // Store to local file
             fileStream.Write(rcvBuffer, 4, len - 4);

             // Send Ack Packet to TFTP Server
             sndBuffer = CreateAckPacket(packetNr++);
             tftpSocket.SendTo(sndBuffer, sndBuffer.Length, SocketFlags.None, serverEP);
          }

          // Was it the last packet ?
          if (len < 516) {
            break;
          } else {
            // Receive Next Data Packet From TFTP Server
            len = tftpSocket.ReceiveFrom(rcvBuffer, ref dataEP);
          }
        }
        // Close Socket and release resources
        tftpSocket.Close();
        fileStream.Close();
    }
       //TFTPClient t = new TFTPClient("127.0.0.1");
       //t.Put();
       //t.Get();
    }
}

--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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