C#之序列化数据传输一

1、客户端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using CommData;
//客户端
namespace cilentDemo1
{
    class Program
    {
        static void Main(string[] args)
        {

            string IP = "127.0.0.1";
            int port = 8050;
            Console.WriteLine("starup cilent");
            try
            {
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(IP), port);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ipe);
                Console.WriteLine("connnect ser");
                Cdata cil = new Cdata();
                cil.name = "roles_gril";
                cil.sex = "gril";
                cil.age = 20;

                using (MemoryStream meroy = new MemoryStream())
                {
                    BinaryFormatter binary = new BinaryFormatter();
                    binary.Serialize(meroy, cil);
                    meroy.Seek(0, SeekOrigin.Begin);
                    meroy.Flush();
                    byte[] by = new byte[1024];
                    while (meroy.Read(by, 0, by.Length) > 0)
                    {
                        Console.WriteLine("send size " + by.Length);
                        socket.Send(by);
                    }
                    Console.WriteLine("send over");
                    socket.Close();
                }
                   
            }
            catch
            {

            }
            Console.ReadKey();

        }
    }
}

2、服务端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using CommData;
//服务端
namespace serverDemo1
{
    class Program
    {
        static void Main(string[] args)
        {
            string IP = "127.0.0.1";
            int port = 8050;
            Console.WriteLine("starup serv");
            try
            {
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(IP), port);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Bind(ipe);
                socket.Listen(10);
                Console.WriteLine("start listen");
                Socket ac = socket.Accept();
                byte[] buffer = new byte[1024];
                using (MemoryStream mStream = new MemoryStream())
                {
                    mStream.Seek(0, SeekOrigin.Begin);
                    while (true)
                    {
                        int ReceiveCount = ac.Receive(buffer, 1024, 0);
                        if (ReceiveCount == 0)
                        {
                            break;//接收到的字节数为0时break
                        }
                        else
                        {
                            Console.WriteLine("成功获取到数据");
                            mStream.Write(buffer, 0, ReceiveCount); //将接收到的数据写入内存流
                        }
                    }
                    mStream.Flush();
                    Console.WriteLine("刷新缓冲区");
                    mStream.Position = 0;
                    BinaryFormatter bFormatter = new BinaryFormatter();
                    if (mStream.Capacity > 0)
                    {
                        Cdata msg = (Cdata)bFormatter.Deserialize(mStream);//将接收到的内存流反序列化为对象
                        Console.WriteLine("name " + msg.name + "  sex " + msg.sex + "  age" + msg.age);
                    }
                    else {
                        Console.WriteLine("接收到的数据为空。");
                    }
                    ac.Close();

                }


            }
            catch(Exception e)
            {
                Console.WriteLine("ex " + e.Message);
            }
            Console.ReadKey();
        }
    }

}


3、公用数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//公用数据
namespace CommData
{
    [Serializable]
    public class Cdata
    {
        public string name;
        public string sex;
        public int age;
    }
}



 

发布了70 篇原创文章 · 获赞 68 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Rose_Girls/article/details/51265083