0
我试图创建一个需要在后台运行,并侦听传入通信窗口服务IP监听器(一个正常和常规TCP监听)TCP在Windows服务
我的代码是:
private TcpListener server;
public void startServer()
{
// EventLog.WriteEntry(source, "connected on: " + ipAddress.ToString() + " port: " + Service1.Port.ToString());
server = new TcpListener(IPAddress.Parse("127.0.0.1"), Service1.Port);
server.Start();
while (true)
{
var client = server.AcceptTcpClient();
new Thread(work).Start(client);
}
public void work(object client)
{
string msg = null;
var clientLocal = (TcpClient)client;
using (NetworkStream ns = clientLocal.GetStream())
using (StreamReader sr = new StreamReader(ns))
{
byte[] msgFullArray = new UTF8Encoding(true).GetBytes(msg);
fs.Write(msgFullArray, 0, msg.Length);
}
现在,如果你不看的工作方法,就好象每当我开始我的服务冻结每当我试图在我启动它:
var client = server.AcceptTcpClient();
意味着我的服务永远不会用苏氨酸EAD或我的工作方法.. 我可以从以前的记录看,它进入我的while循环,然后就超时服务
不清楚什么叫'startServer'。如果它是由你的'OnStart'方法直接调用的,那就是一个问题。正如你所看到的,'AcceptTcpClient'阻塞直到出现一个客户端,但OnStart被调用的线程*不属于你*,你不应该阻塞它。 –
那么你是正确的,我的onstart方法调用 “server.startServer();” 但我不知道我明白如何解决它呢? – Pilsneren