Кодировать / декодировать xxxclass в byte [], а затем отправлять его на удаленный компьютер с C # - PullRequest
0 голосов
/ 07 марта 2009

Привет, у меня есть проект сокета TCP / IP.

я могу отправлять строковые сообщения на сервер со стороны клиента и получать ответы от сервера. Но получение одного строкового сообщения и отправка только одной строки (или любого другого объекта). Я хочу закодировать класс Personel в массив байтов после отправки клиентам со стороны сервера. чем получить значения из моего класса.

// КОД СТОРОНЫ СЕРВЕРА Connect () запускается при загрузке формы

 private void Connect()         
 {
        // start listen socket
        dinleyiciSoket = new TcpListener(System.Net.IPAddress.Any, 10048);
        dinleyiciSoket.Start();
        Socket istemciSoketi = dinleyiciSoket.AcceptSocket();
        NetworkStream agAkisi = new NetworkStream(istemciSoketi);
        BinaryReader binaryOkuyucu = new BinaryReader(agAkisi);
        BinaryWriter binaryYazici = new BinaryWriter(agAkisi);
        string alinanMetin = binaryOkuyucu.ReadString();
        MessageBox.Show(alinanMetin, "Yeni Genelge", MessageBoxButtons.OK);
        binaryYazici.Write(true);
        dinleyiciSoket.Stop();
        Connect();
    }

////////// СТОРОНА КЛИЕНТА //////////////

  private string IpAdresi(string host)
    {
        string address = "";
        IPAddress[] addresslist = Dns.GetHostAddresses(host);

        foreach (IPAddress theaddress in addresslist)
        {
            if (theaddress.AddressFamily == AddressFamily.InterNetwork)
            {
                address = theaddress.ToString();
            }


        }
        return address;
    }

    bool onay;
    private void button1_Click(object sender, EventArgs e)
    {
        //create socket connection
        Socket istemciBaglantisi = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //Bağlantıyı gerçekleştir
        if (istemciBaglantisi.Connected != true)
        {
            istemciBaglantisi.Connect(IPAddress.Parse(IpAdresi(txtHost.Text)), 10048);
        }


        agAkisi = new NetworkStream(istemciBaglantisi);
        binaryYazici = new BinaryWriter(agAkisi);
        binaryOkuyucu = new BinaryReader(agAkisi);
        binaryYazici.Write(txtMesaj.Text);
        onay = binaryOkuyucu.ReadBoolean();
        MessageBox.Show(onay.ToString());
        istemciBaglantisi.Close();



    }

Ответы [ 3 ]

1 голос
/ 07 марта 2009

Посмотрите на сериализацию объекта. См. Здесь для примеров. Это должно привести вас в правильном направлении.

0 голосов
/ 07 марта 2009

Я бы использовал сериализацию объектов или XmlSerialization, которые доступны в .NET. Я бы не стал смотреть на буферы протокола Google, потому что это кодирование RPC имеет небольшое преимущество по сравнению с тем, что уже есть в .NET, но неясно, особенно в мире .NET, и особенно сейчас. Я бы не стал делать ставку на то, что она станет основной для разработчиков .net. В результате вы будете только усложнять поддержку своего кода с помощью этой кодировки RPC.

На самом деле я не вижу необходимости в протобуфах, когда взаимосвязанные приложения однородны и НЕ соответствуют масштабам центров обработки данных Google. Я также не вижу необходимости, даже если правило является неоднородным, потому что у нас уже есть JSON и XML. Они оба читабельны и удобны в использовании, где нет протобуфов.

В любом случае .NET имеет то, что вам нужно для этого, встроенное.

0 голосов
/ 07 марта 2009

Вы можете использовать буфер протокола Google. Это быстрый и компактный механизм для сериализации объектов. В .NET есть две реализации: protobuf-net и protobuf .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...