gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:44:18 24 4
gpt4 key购买 nike

我有一个对象列表,我想通过 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);
}

但我宁愿先序列化对象,然后再发送它。所以我有一个流,需要一个字节数组。

这是我必须接收的数据:

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();
}

}

这是我正在使用的:

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);
}
}

如何初始化流?我需要以 Stream 形式获取数据以将其反序列化为 Object。

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

最佳答案

您必须“序列化”对象,并在另一侧反序列化它们。参见 http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx了解相关信息。

不过您必须小心,如果在发送数据时连接出现问题,您可能没有足够的数据来完全重新创建对象,并且您的程序可能会在某些意想不到的地方失败。仅当您收到所有内容时才创建对象。

关于c# - 如何通过套接字发送对象 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8006205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com