0
我試圖將一個對象轉換爲字節數組&通過套接字發送給其他進程 ,但進程停止,而對象的反序列化只是掛起。 代碼有什麼問題?解除反序列化錯誤+套接字
客戶端代碼
namespace client_2
{
[Serializable]
class data
{
public ArrayList list;
public data()
{
list = new ArrayList();
}
public void add(object o)
{
list.Add(o);
}
public void disp()
{
foreach (object ob in list)
{
Console.WriteLine(ob.ToString());
}
}
}
class Program
{
static void Main(string[] args)
{
IPAddress adr = IPAddress.Parse("127.0.0.1");
TcpClient cli = new TcpClient();
cli.Connect(adr, 5577);
NetworkStream strem = cli.GetStream();
if (cli.Connected)
{
data d = new data();
d.add("hello");
d.add(44);
Byte[] buffer = new Byte[1024];
BinaryFormatter from = new BinaryFormatter();
MemoryStream ms = new MemoryStream(buffer,true);
from.Serialize(ms, d);
strem.Write(buffer, 0, buffer.Length);
}
strem.Close();
cli.Close();
}
}
}
服務器代碼
namespace server_2
{
[Serializable]
class data
{
public ArrayList list;
public data()
{
list = new ArrayList();
}
public void add(object o)
{
list.Add(o);
}
public void disp()
{
foreach (object ob in list)
{
Console.WriteLine(ob.ToString());
}
}
}
class Program
{
public static void handleReq(object o)
{
TcpClient client = o as TcpClient;
NetworkStream strm = client.GetStream();
Byte[] buf = new Byte[1024];
strm.Read(buf, 0, 1024);
BinaryFormatter from = new BinaryFormatter();
MemoryStream ms = new MemoryStream(buf, true);
data d = (data)from.Deserialize(ms); // hangs here
d.disp();
strm.Close();
client.Close();
}
static void Main(string[] args)
{
IPAddress addr = IPAddress.Parse("127.0.0.1");
TcpListener listner = new TcpListener(addr,5577); ;
listner.Start();
while (true)
{
TcpClient client = listner.AcceptTcpClient();
Task.Factory.StartNew(handleReq,client);
}
listner.Stop();
}
}
}
你需要閱讀整網絡流不僅僅是1024字節。您可以將網絡直接放入反序列化中。它會失敗無論如何,因爲在服務器端的類數據不匹配客戶端的類數據(使用共享的DLL爲客戶端和服務器,持有類數據) – rene 2011-12-29 10:56:57
感謝您的回覆我正在嘗試你的建議 – vivek 2011-12-29 11:36:35
它的工作感謝 – vivek 2011-12-30 09:10:04