私はC#で作られたクライアント/サーバアプリケーションを持っています。サーバーに文字列を送信すると正常に動作します。しかし、私は(単純な)オブジェクトをStringsの代わりにサーバーに送る必要があります。しかし、私はこれを行う方法がわかりません。私は現在、私のクライアントのためにこれを持っている:C#でサーバにオブジェクトを送信する
私が送信したいクラス:
[Serializable]
public class Actions
{
// Movement
public bool forward = false;
public bool left = false;
public bool backward = false;
public bool right = false;
}
を、私はデフォルトの送信()コマンドを使用してオブジェクトを送信します。サーバー側では
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();
}
私は(...とthatsのiがで立ち往生していた)、このようなデータを受信します。しかし、その前に私が最初にそうようにバイト配列にアクションクラスを変換happends :私は、サーバー上のオブジェクトにアクセスすることができ、そうすること
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;
次に、オブジェクトにどのようなプロパティがあるかわからないため、エラーが表示されます。誰もこれを行う方法を任意のアイデア?? Actions
にオブジェクトから
1.ソケットのみにしたいですか?リモート処理やWCFのような他のソリューションがあります。また、複数のクライアントがその問題よりも通信する場合。 2.別の方法は、この方法でパスします。 最初に送信するSizeofByarray オブジェクト配列を送信します。 – dotnetstep