【发布时间】:2011-12-17 13:18:59
【问题描述】:
我有一个用 C# 制作的客户端/服务器应用程序。当我向服务器发送消息字符串时,它工作正常。但我需要将(简单)对象发送到服务器而不是字符串。但我不知道该怎么做。我目前为我的客户准备了这个:
我要发送的课程:
[Serializable]
public class Actions
{
// Movement
public bool forward = false;
public bool left = false;
public bool backward = false;
public bool right = false;
}
然后我使用默认的 Send() 命令发送对象。但在此之前,我首先将 Actions 类转换为字节数组,如下所示:
public void SendObject ( object obj )
{
this.socket.Send ( this.ObjectToByteArray ( obj ) );
}
// Convert an object to a byte array
private byte[] ObjectToByteArray(object obj)
{
if(obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
return ms.ToArray();
}
在服务器端,我收到这样的数据(那是我被困在...):
public void OnDataReceived(IAsyncResult asyn)
{
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
try
{
// Complete the BeginReceive() asynchronous call by EndReceive() method
// which will return the number of characters written to the stream
// by the client
int iRx = socketData.m_currentSocket.EndReceive (asyn);
char[] chars = new char[iRx + 1];
// CONVERT THE BYTE ARRAY BACK TO AN OBJECT
//object Cls = this.ByteArrayToObject ( socketData.dataBuffer );
}
catch ( ... ) { }
}
我必须做什么才能访问服务器上的对象?显然,当我这样做时: cls.forward;
然后它给了我一个错误,因为它不知道对象有什么属性。有人知道怎么做吗?
【问题讨论】:
-
1.你只想socket吗?还有其他解决方案,例如远程处理或 WCF。当多个客户交流时也比它的问题。 2.另一种方式是通过这种方式先发送SizeofByarray比发送对象数组。
-
我知道已经很久了。你现在有更好的方法吗?
标签: c# sockets client-server asyncsocket