一个Windows Service与Socket的问题!
这个是我的Windows服务,当我启动服务后,端口打开了,但我在客户端将消息发送到服务后,这服务好像不能响应事件,不知道是不是线程没有打开,还是,请高手帮我看一下?
Windows服务
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace SocketServiceTest
{
public class SocketServiceTest : System.ServiceProcess.ServiceBase
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private bool isLinke;
private System.Threading.Thread th;
private NetworkStream workStream;
private StreamReader sr;
//private StreamWriter sw;
private TcpClient tcpclient = new TcpClient();
private TcpListener Serverlistener;
public SocketServiceTest()
{
// 该调用是 Windows.Forms 组件设计器所必需的。
InitializeComponent();
// TODO: 在 InitComponent 调用后添加任何初始化
}
// 进程的主入口点
static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
// 同一进程中可以运行多个用户服务。若要将
// 另一个服务添加到此进程,请更改下一行
// 以创建另一个服务对象。例如,
//
// ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
//
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new SocketServiceTest() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// SocketServiceTest
//
this.ServiceName = "SocketSerivce";
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
/// <summary>
/// 设置具体的操作,以便服务可以执行它的工作。
/// </summary>
protected override void OnStart(string[] args)
{
isLinke = false;
int port = Int32.Parse("5151");
Serverlistener = new TcpListener(port);
Serverlistener.Start();
isLinke = true;
th = new System.Threading.Thread(new System.Threading.ThreadStart(this.ThunderOne));
th.Start();
// TODO: 在此处添加代码以启动服务。
}
public void ThunderOne()
{
while(true)
{
tcpclient = Serverlistener.AcceptTcpClient();
workStream = tcpclient.GetStream();
sr = new StreamReader(workStream);
string buffer = "";
string received = "";
received+=sr.ReadLine();
if(received.Length!=0)
{
buffer+="a"+received;
buffer+="\r\n";
received+=sr.ReadLine();
}
System.IO.StreamWriter swtxt = new System.IO.StreamWriter(@"C:\Service.txt",false);
swtxt.Write(buffer);
swtxt.Flush();
swtxt.Close();
// listBox1.Items.Add(buffer);
sr.Close();
tcpclient.Close();
workStream.Close();
}
}
/// <summary>
/// 停止此服务。
/// </summary>
protected override void OnStop()
{
th.Abort();
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}
}
}