关于TCPclient发送和接收数据的问题。希望大家帮忙,谢谢
我的代码如下:
需要发送的数据为message中的内容,下面是将message序列化,然后写入NetworkStream
private NetworkStream ntStream;
//
//
//发送数据到
public static void Send()
{
ArrayList message = new ArrayList();
message.Add("test0");
message.Add("test1");
//
// 序列化要传送的数据到临时流
//
MemoryStream mStream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
formatter.TypeFormat = FormatterTypeStyle.TypesWhenNeeded;
formatter.Serialize(mStream, message);
mStream.Flush();
//
// 写入流头
//
MemoryStream sendStream = new MemoryStream();
Byte[] buffer;
//
// 写验证标识 (1 字节)
//
buffer = BitConverter.GetBytes(isValidate);
sendStream.Write(buffer, 0, buffer.Length);
//
// 写临时流长度 (4 字节)
//
buffer = BitConverter.GetBytes((int) mStream.Length);
sendStream.Write(buffer, 0, buffer.Length);
//
// 写发送标识 (4 字节)
//
buffer = BitConverter.GetBytes(StreamID ++);
sendStream.Write(buffer, 0, buffer.Length);
//
// 写入临时流到发送流
//
Byte[] mbuffer = mStream.GetBuffer();
sendStream.Write(mbuffer, 0, (int) mStream.Length);
sendStream.Flush();
Byte[] sendBytes = sendStream.GetBuffer();
ntStream.Write(sendBytes, 0, (int) sendStream.Length);
}
以下代码为读出NetworkStream,在收到NetworkStream后,将其反序列化:
//
//将接收到的信息进行再分配处理
//
public static ArrayList ReceiveScheduler(TcpClient client, NetworkStream stream)
{
byte[] bytes = new byte[client.ReceiveBufferSize];
ArrayList message = null;
int bytesRead = stream.Read(bytes, 0, (int) client.ReceiveBufferSize); // 提示这行出错。
if (bytesRead > 0)// 图过信息队列中,信息内容不为空,则读出
{
try
{
int sendLength = BitConverter.ToInt32(bytes, 1) + 9;
if (sendLength == bytesRead)
{
MemoryStream mStream = new MemoryStream(bytes, 9, sendLength - 9);
BinaryFormatter formatter = new BinaryFormatter();
formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
formatter.TypeFormat = FormatterTypeStyle.TypesWhenNeeded;
message = (ArrayList) formatter.Deserialize(mStream);
message.Add(BitConverter.ToUInt32(bytes, 5));
}
}
catch
{
//
// 忽略
//
}
}
return message;
}
遇到的问题:
message的类型为ArrayList,其中的内容message[0]为:test0;message[1]为:test1;将message序列化后写入NetworkStream发送,在接收到NetworkStream后将其反序列化,发现得到的message的内容与原来的内容不符合,请问各位,是不是我上面的代码在什么地方出错了呢?请帮忙看看,谢谢大家