1

「プロトコル」の一部としてEnum、クライアントとサーバー間で共有され、残りのデータをどう処理するかを指示する があります

クライアント:

byte[] outStream = Encoding.UTF8.GetBytes((int)Shared.CommandType.ClientJoin + "sometext");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();

そしてサーバー側で:

string dataFromClient = null;
byte[] bytesFrom = new byte[1024];
NetworkStream networkStream = tcpclient.GetStream();
int bytesread = networkStream.Read(bytesFrom, 0, bytesFrom.Length);

Byte[] commandBytes = new Byte[4];
Array.Copy(bytesFrom, commandBytes, 4);
dataFromClient = Encoding.UTF8.GetString(bytesFrom, 4, bytesread - 4);

//test values
int receivedcommand = BitConverter.ToInt32(commandBytes, 0);
int actualcommand = (int)Shared.CommandType.ClientJoin;

ただし、受信した「値」 (テストでは 1634222896) は、実際の値 (0) とは大きく異なります。

バイト配列の分割に関係する何か非常に間違ったことをしていると確信していますが、私の人生では何を見ることができません

何か案は?

(いつものように、上記のものよりも優れた実装方法があれば、私は提案を受け付けています:))

4

1 に答える 1

1
byte[] outStream = Encoding.UTF8.GetBytes((int)Shared.CommandType.ClientJoin + "sometext");

になる

byte[] outStream = Encoding.UTF8.GetBytes(0+ "sometext");

byte[] outStream = Encoding.UTF8.GetBytes("0sometext");

受信後、commandBytesバイト表現があります {'0','s','o','m'}

そしてBitConverter.ToInt32(commandBytes, 0);、すべてのメンバーがゼロ以外の値を持つ4バイト配列の整数表現を作成します(すべてがASCIIテキストであるため)。

于 2012-08-28T15:19:17.753 に答える