将xxxclass编码/解码为byte [],然后使用C#将其发送到远程PC

时间:2009-03-07 15:57:03

标签: sockets

您好我有一个TCP / IP套接字项目。

我可以向客户端的服务器发送字符串消息,我可以从服务器获得响应。 但是获取一个字符串消息并且只发送一个字符串(或任何其他对象)。我想从服务器端发送到客户端之后将Personel类编码为字节数组。并解码它。而不是从我的班级获取价值。

// SERVER SIDE CODE Con​​nect()从表单加载

开始
 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 个答案:

答案 0 :(得分:1)

看看对象序列化。例如See here。这应该会让你朝着正确的方向前进。

答案 1 :(得分:0)

您可以使用谷歌的协议缓冲区。它是一种快速而紧凑的序列化对象机制。 .NET上有两种实现:protobuf-netprotobuf

答案 2 :(得分:0)

我使用.NET中提供的对象序列化或XmlSerialization。我不会看谷歌的协议缓冲区,因为RPC编码几乎没有.NET中已有的优势,但它很模糊,特别是在.NET世界中,尤其是现在。我不打赌它成为.net开发者的主流。因此,您只能使用此RPC编码使代码更难维护。

当互连的应用程序是同质的,并且不在Google的数据中心范围内时,我并不真正看到对protobufs的需求。即使异构性是规则,我也没有看到需要,因为我们已经有了JSON和XML。它们既可读又可维护,而protobufs则不然。

在任何情况下,.NET都具备内置的功能。