您好我有一个TCP / IP套接字项目。
我可以向客户端的服务器发送字符串消息,我可以从服务器获得响应。 但是获取一个字符串消息并且只发送一个字符串(或任何其他对象)。我想从服务器端发送到客户端之后将Personel类编码为字节数组。并解码它。而不是从我的班级获取价值。
// SERVER SIDE CODE 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();
}
答案 0 :(得分:1)
看看对象序列化。例如See here。这应该会让你朝着正确的方向前进。
答案 1 :(得分:0)
您可以使用谷歌的协议缓冲区。它是一种快速而紧凑的序列化对象机制。 .NET上有两种实现:protobuf-net和protobuf。
答案 2 :(得分:0)
我使用.NET中提供的对象序列化或XmlSerialization。我不会看谷歌的协议缓冲区,因为RPC编码几乎没有.NET中已有的优势,但它很模糊,特别是在.NET世界中,尤其是现在。我不打赌它成为.net开发者的主流。因此,您只能使用此RPC编码使代码更难维护。
当互连的应用程序是同质的,并且不在Google的数据中心范围内时,我并不真正看到对protobufs的需求。即使异构性是规则,我也没有看到需要,因为我们已经有了JSON和XML。它们既可读又可维护,而protobufs则不然。
在任何情况下,.NET都具备内置的功能。