如何通过套接字C#发送对象

the*_*man 1 c# sockets tcp object

我有一个对象列表,我想发送它认为TCP套接字连接.一种方法是获取对象列表并获取所有值,通过逗号和接收数据将它们分开,另一端和对象中的值.我是否可以发送对象列表,因为它可以在WCF Web服务中完成.你能告诉我怎么样?谢谢!

我之前已经为此创建了一个WCF服务但是因为它有一些无法解决的问题而改变了它.所以我正在创建此客户端服务器应用程序

此外,正在发送的数据每隔几秒刷新一次,很多用户都需要它.经过一些研究,我发现这将是一个更好的选择.

我有这个课程,我通过它发送消息

public void SendMessage(string text)
{
    Byte[] bytesSent = Encoding.UTF8.GetBytes(text);
    SocketAsyncEventArgs writeEventArgs = new SocketAsyncEventArgs();
    writeEventArgs.SetBuffer(bytesSent, 0, bytesSent.Length);
    socket.SendAsync(writeEventArgs);
}
Run Code Online (Sandbox Code Playgroud)

但我宁愿首先序列化对象然后发送它.所以我有一个流和需要作为字节数组.

这是我必须接收的数据:

void ReceiveData()
{
    try
    {
        int recv;
        string stringData;
        while (true)
        {
            recv = socket.Receive(data);
            stringData = Encoding.ASCII.GetString(data, 0, recv);
            if (stringData == "bye")
                break;
            ClientDataRecievedEventArgs sd = new ClientDataRecievedEventArgs(stringData);
            DataRecieved(this, sd);
        }
        stringData = "bye";
        byte[] message = Encoding.ASCII.GetBytes(stringData);
        socket.Send(message);
        socket.Close();
        this.Dispose();
        return;
    }
    catch (Exception)
    {
        socket.Close();
        this.Dispose();
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我想要的:

SoapFormatter formatter = new SoapFormatter();

foreach (Communication.Client Client in server.ClientList)
{
    foreach (ObjectLibrary.Model.PIP p in Repository.GlobalRepository.PIPInformation)
    {

        formatter.Serialize(stream, p);
        Client.SendMessage(stream);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何初始化流?我需要将数据作为Stream来将其反序列化为Object.

所以我有对象列表我可以序列化整个列表吗?

Som*_*ude 7

您必须"序列化"对象,并在另一侧反序列化它们.有关该信息,请参阅http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx.

但是,您必须要小心,如果在发送数据时连接发生了某些事情,您可能没有足够的数据来完全重新创建对象,并且您的程序可能会在某些意外的位置失败.只有在收到所有内容时才创建对象.