一个用HTTP接收用户发送数据的服务器,接收到数据后处理然后在返回处理结果,怎样做到为每个用户启动一个新的线程呢?下边是我的代码,但这样不行.
private void button1_Click(object sender, EventArgs e)
{
try
{
threadListen = new Thread(new ThreadStart(listen));
threadListen.Start();
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
} private void listen()
{
try
{
tcpListener = new TcpListener(port);
//开始监听客户请求
tcpListener.Start();
while (true)
{
//获得一个用户处理用户请求的套接字
client = tcpListener.AcceptTcpClient();
//启动处理用户请求信息的线程
threadService = new Thread(new ThreadStart(service));
threadService.Start();
threadService.Join();
}
}
catch (SocketException e)
{
MessageBox.Show("SocketException :" + e.ToString());
}
finally
{
tcpListener.Stop();
}
}
private void service()
{
Byte[] bytes = new Byte[1024];
StringBuilder sData = new StringBuilder();
//获得一个用于读写操作的流
NetworkStream stream = client.GetStream(); int i;
lock (this)
{
try
{
do
{
i = stream.Read(bytes, 0, bytes.Length);
//转换数据字节成字符串
sData.Append(System.Text.Encoding.UTF8.GetString(bytes, 0, i));
}
while(stream.DataAvailable);
//这里做数据处理.... //发送回复
byte[] msg = System.Text.Encoding.UTF8.GetBytes("OK");
stream.Write(msg, 0, msg.Length);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
finally
{
client.Close();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
threadListen = new Thread(new ThreadStart(listen));
threadListen.Start();
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
} private void listen()
{
try
{
tcpListener = new TcpListener(port);
//开始监听客户请求
tcpListener.Start();
while (true)
{
//获得一个用户处理用户请求的套接字
client = tcpListener.AcceptTcpClient();
//启动处理用户请求信息的线程
threadService = new Thread(new ThreadStart(service));
threadService.Start();
threadService.Join();
}
}
catch (SocketException e)
{
MessageBox.Show("SocketException :" + e.ToString());
}
finally
{
tcpListener.Stop();
}
}
private void service()
{
Byte[] bytes = new Byte[1024];
StringBuilder sData = new StringBuilder();
//获得一个用于读写操作的流
NetworkStream stream = client.GetStream(); int i;
lock (this)
{
try
{
do
{
i = stream.Read(bytes, 0, bytes.Length);
//转换数据字节成字符串
sData.Append(System.Text.Encoding.UTF8.GetString(bytes, 0, i));
}
while(stream.DataAvailable);
//这里做数据处理.... //发送回复
byte[] msg = System.Text.Encoding.UTF8.GetBytes("OK");
stream.Write(msg, 0, msg.Length);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
finally
{
client.Close();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货