【发布时间】:2014-04-22 23:52:15
【问题描述】:
我已经实现了一个服务器,现在正试图使其成为多线程,但是遇到了一个问题,即服务器在接收到数据时失败,并且StreamWriter 无法从Stream 读取数据。
代码如下:
class whereisServer
{
static Socket connection;
static object threadLock = new object();
static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(Run));
t.Start();
}
static void Run()
{
NetworkStream socketStream;
TcpListener listener;
const int PORT = 43;
try
{
listener = new TcpListener(IPAddress.Any, PORT);
listener.Start();
while (true)
{
connection = listener.AcceptSocket();
socketStream = new NetworkStream(connection);
try
{
connection.ReceiveTimeout = 1000;
connection.SendTimeout = 1000;
Thread t = new Thread(new ParameterizedThreadStart(DoRequest));
t.Start(socketStream);
//DoRequest(socketStream);
}
catch (IOException e)
{
Console.WriteLine(e.Message + "\nTimeOut Handled");
}
finally
{
socketStream.Close();
connection.Close();
}
}
}
catch (SocketException e)
{
Console.WriteLine(e.Message);
}
}
static void DoRequest(object stream)
{
NetworkStream socketStream = (NetworkStream)stream;
StreamWriter writer = new StreamWriter(socketStream);
StreamReader reader = new StreamReader(socketStream);
lock (threadLock)
{
//DO SERVER STUFF HERE
}
当在没有线程的情况下调用DoRequest 方法时,程序运行良好,但是当将其注释掉并调用线程版本时,就会出现问题。
如果有人能就Stream 无法运行的原因提出建议,我将不胜感激。
【问题讨论】:
-
如果您向我们提供错误信息会有所帮助。否则我们只能猜测问题所在。
-
异常说“流不可写。此外,它说我的 StreamWriter 和 StreamReader 等于 null,尽管我已经创建了它们。虽然当我不使用线程时,这段代码工作正常.
标签: c# multithreading sockets networkstream