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

Sockets 将xxxclass编码/解码为字节[],然后用C将其发送到远程PC#,sockets,Sockets,嗨,我有一个TCP/IP套接字项目 我可以通过客户端向服务器发送字符串消息,并从服务器获得响应。 但得到一个字符串消息,只发送一个字符串(或任何其他对象)。我想在从服务器端发送到客户端之后,将Personel类编码为字节数组,并对其进行解码。而不是从我的课堂上获取价值观 //服务器端代码Connect()在表单加载时从开始 private void Connect() { // start listen socket dinleyiciSok

嗨,我有一个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();



    }

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

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

我将使用对象序列化或XmlSerialization,这两种实现都在.NET中可用。我不会看Google的协议缓冲区,因为RPC编码与.NET中已有的相比并没有什么优势,但它是模糊的,尤其是在.NET世界,尤其是现在。我不敢打赌它会成为.net开发人员的主流。因此,使用此RPC编码只会使代码更难维护

当相互连接的应用程序是同质的,并且不在谷歌数据中心的规模上时,我真的不认为有必要使用protobufs。我也不认为有必要,即使在异构性成为规则的情况下,因为我们已经有了JSON和XML。它们既可读又可用,而protobufs则不可用

在任何情况下.NET都有您所需要的内置功能