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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NetworkStream в роли XmlSerializer, Помогите доработать код 
:(
    Опции темы
WolfTheGrey
Дата 3.1.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

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



Добрый день светилы!

Помогите грамотно написать код на TcpCoketax чтоб передавать данные по сети в виде Byte[] масива.

я написал такой код:
(Приёмник и передатчик это два разных класса живущих собственной жизнью в одельном потоке в не прирывающемся цикле While )

примник:
Код

static TcpListener clientListener;
static int ECHO_PORT;

public TcpClient clientSokets;
NetworkStream netStream;
MemoryStream memoruStream = new MemoryStream();
public XmlSerializer formater = new XmlSerializer(typeof(Packet));
Packet packets;

byte[] returnData;
string userName;

public void Connect()
        {
                clientListener = new TcpListener(ECHO_PORT);
                clientListener.Start();
                //слушает запрос на соединение
                 clientSokets = clientListener.AcceptTcpClient();

            //прием первого сообщения!!!!

            NullReferensy();
            netStream = clientSokets.GetStream();
            netStream.Read(returnData, 0, returnData.Length);
            memoruStream.Write(returnData, 0, returnData.Length);
            memoruStream.Position = 0;//контрольная точка проблеммы!!!
            packets = (Packet)formater.Deserialize(memoruStream);
            memoruStream.Dispose(); //очистка совести :):)

            //чтение полученых данных
            userName = packets.userNik;
         }

void NullReferensy()
        {
            memoruStream = new MemoryStream();
            packets = new Packet();
            returnData = new byte[1024];
            formater = new XmlSerializer(typeof(Packet));
        }


и передатчик:
Код

TcpClient eClient = null;
NetworkStream networkWrite;
 XmlSerializer binFormat;
ClientListener clientLister;

 MemoryStream memoru = new MemoryStream();
Packet pakets = new Packet();
 byte[] byteData;

public void Connect()
        {
         eClient = new TcpClient(ip, ECHO_PORT);
         networkWrite = eClient.GetStream();
         NullReferensy();
         pakets.id = 10;
        pakets.name = "networck";
         pakets.stringData = "Да здравствует учебa!!!!!!!!!!!!!!!";
         pakets.userNik = userName;
         clientWrite(pakets);
        }

void NullReferensy()
        {
            memoru = new MemoryStream();
            pakets = new Packet();
            byteData = new byte[1024];
            binFormat = new XmlSerializer(typeof(Packet));
        }

private void clientWrite(Packet pac) //передатчик сообщения (class Packet - содержи переменные которые должны быть сериализованы и отправлены по сети)
        {
            binFormat.Serialize(memoru, pac); //сериализация пакета и сохранение его в памяти
            memoru.Position = 0;

            //oTправка сообщения          // запись конечной точки
            memoru.Read(byteData, 0, (int)memoru.Length + 1); //контрольная точка проблеммы!!!

            while (!networkWrite.CanWrite)
                Thread.Sleep(10);
            networkWrite.Write(byteData, 0, byteData.Length);
            memoru.Dispose();
        }



Проблемма заключается в том, что данные не коректно передаюся.
1- отказ сериализации - так как масив Byte[]- был передан с нулями.
2- частенько бывает многократный повтор передоваемой строки (пока студия не остановит, выдав ошибку)
3-NetworkStream -на ззапись или на чтение бывает закрытым при открытом соединеии.
Во! smile


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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