TCP / IP-Listener-in-windows-Dienst
Ich versuche, einen windows-Dienst erstellen, muss im hintergrund laufen und eingehende Datenverkehr (eine normale und regelmäßige TCP-listener)
mein code ist:
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);
}
nun, wenn Sie schauen Sie nicht auf die Methode an alle, wie immer, wenn ich beginne meinen Dienst, es friert immer, wenn ich versuche, starten Sie es auf meine :
var client = server.AcceptTcpClient();
Bedeutung mein Dienst wird nie auf den Thread oder meine Methoden zu Arbeiten..
ich kann sehen, aus früheren Anmeldung, es geht meiner while-Schleife und dann nur mal den service
Nicht klar ist, was Aufruf
gut, Sie sind richtig, dass meine onstart-Methode ist der Aufruf "server.startServer();" aber ich bin mir nicht sicher, ob ich verstehe, wie es zu beheben dann?
startServer
. Wenn es direkt aufgerufen, durch Ihre OnStart
Methode, das ist ein problem. Als Sie beobachtet habe, AcceptTcpClient
blockiert, bis ein client wird angezeigt, aber der thread, der OnStart
genannt wird, auf der gehört nicht zu Ihnen, und Sie sollten nicht es zu blockieren.gut, Sie sind richtig, dass meine onstart-Methode ist der Aufruf "server.startServer();" aber ich bin mir nicht sicher, ob ich verstehe, wie es zu beheben dann?
InformationsquelleAutor Pilsneren | 2016-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem
OnStart
Methode, die Sie haben zu instanziieren server-Klasse.verantwortlich ist zu behandeln, die verbindungen zum server durch erstellen einer neuen
Thread
(so, dass es eine nicht-blockierende Verfahren)für jeden socket, die es hören, die von einem
TCPListener
.Hier ist es die volle Projekt Artikel.
InformationsquelleAutor