2010-07-11 137 views
0

新手问题给你。我有以下代码。我得到一个错误,因为一个对象必须传递给ClientRequest。但我不确定如何将流作为对象传递。将流转换为对象?

TcpClient _client = _listener.AcceptTcpClient();
NetworkStream _clientStream = _client.GetStream(); ThreadPool.QueueUserWorkItem(ClientRequest, _clientStream);

感谢

+1

请为ClientRequest添加代码或至少签名 – 2010-07-11 20:41:43

回答

0

为的ClientRequest声明,像这样有什么不妥,只要该代码:

public void ClientRequest(Object state) { 
... 
} 
0

这个问题可能是你不能通过流作为一个对象 - .net中的所有东西都是一个对象,因此投射到对象(这是“扩大”转换,因此不需要指定)应该不是问题。

我的猜测是你的ClientRequest需要传递一个NetworkStream或其他东西,它不会得到 - 它会得到一个对象,然后你需要将它转换为NetworkStream以便使用它正常。

+0

基本上我想将网络队列传递给ClientRequest函数来读取和写入客户端。但ThreadPool.QueueUserWorkItem只会让我传递一个对象。 void ClientRequest(object request) { byte[] response = ObjectToByteArray(request); Console.WriteLine("\nClients request:\n{0}\n", Encoding.ASCII.GetString(request)); } 即时通讯新的这与我:) – arbme 2010-07-11 21:00:01

+0

@arbme:对。你只能传递一个对象。但是*一切*都是一个对象,所以你应该能够传递任何你喜欢的东西。诀窍是,在你的函数中,你想把它转换回你知道的东西 - 比如'NetworkStream ns =(NetworkStream)请求',并且在你的情况下使用'ns'而不是'request'。 – cHao 2010-07-11 21:16:42

+0

@arbme:另外,对于是传递一个流还是一个字节数组或者其他东西,你似乎有点困惑。演员阵容可能会帮助你理清这一点。 – cHao 2010-07-11 21:19:35