Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с TCP 
V
    Опции темы
artstalker
Дата 5.2.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет. Есть клиент-сервер приложение для передачи файлов по TCP. Тестил на локалхосте и по локалке - всё работает. Вчера пробовал по тестить через инет - не может почему-то прочитать поток.. Ниже приведен текст программы и сама ошибка

Клиент:
    
Код

TcpClient eclient = new TcpClient("localhost",34567);  
    NetworkStream writerStream = eclient.GetStream();  
    BinaryFormatter format = new BinaryFormatter();  
    byte[] buf = new byte[1024 ];  
    int count;  
    FileStream fs = new FileStream("111.txt", FileMode.Open);  
    BinaryReader br = new BinaryReader(fs);  
    long k = fs.Length;//Размер файла.  
    format.Serialize(writerStream, k.ToString());//Вначале передаём размер  
    while ((count = br.Read(buf, 0, 1024 )) > 0)  
            {  
                 format.Serialize(writerStream, buf);//А теперь в цикле по 1024 байта передаём файл  
             }  



   Сервер:
   
Код

    cpListener clientListener = new TcpListener(34567);    
    clientListener.Start();    
     TcpClient client = clientListener.AcceptTcpClient();    
     NetworkStream readerStream = client.GetStream();    
     BinaryFormatter outformat = new BinaryFormatter();    
     FileStream fs = new FileStream("111.jpg", FileMode.OpenOrCreate);    
     BinaryWriter bw = new BinaryWriter(fs);    
     int count;    
/*В следующей строчке error возникает: 
 Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал 
  существующее подключение.*/  
   
     count = int.Parse(outformat.Deserialize(readerStream).ToSt  ring());//Получаем размер файла    
     int i=0;    
     for (; i < count;i += 1024 )//Цикл пока не дойдём до конца файла    
             {    
     
                 byte[]  buf = (byte[])(outformat.Deserialize(readerStream));//Собственно читаем из потока и записываем в файл    
                 bw.Write(buf);    
             }    
                 
     bw.Close();    
     fs.Close();    
     
     Console.ReadLine();    


Подскажите какая может быть причина?

Это сообщение отредактировал(а) artstalker - 5.2.2009, 18:02
PM MAIL   Вверх
artstalker
Дата 6.2.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ап. Возможно проблема в том, что при тестирование клиент и сервер выходили в инет через локалку?
PM MAIL   Вверх
artstalker
Дата 12.2.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ап
PM MAIL   Вверх
artstalker
Дата 15.2.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А проблема лежала на поверхности. Я там голову ломал, думал может фаервол не пускает, или пакеты не доходят... А что оказалось: клиент пересылал серверу пакеты и сразу закрывался, соответственно обрывая TCP подключение. На локалхосте и домашнем LAN-е просто хватало времени, чтобы передать до закрытия. Т.е. стоит просто добавить в конце клиента Console.ReadLine(); =)
PM MAIL   Вверх
AndriyMD
Дата 17.2.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



и что, все работает? странно. TCP протокол используется только в пределах локальной сети. для связи через интернет нужно использовать другие протоколы (HTTP, FTP).
PM MAIL   Вверх
Partizan
Дата 17.2.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



AndriyMD, вы ошибаетесь. TCP/IP и HTTP/FTP - это протоколы разного уровня...

http://www.google.ru/search?q=%D0%BC%D0%BE...lient=firefox-a


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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