は、私がバックグラウンドで実行され、着信トラフィックをリッスンする必要があるWindowsサービスを作成しようとしているWindowsサービスでIPリスナー(通常、通常のTCPリスナー)TCP
私のコードは次のとおりです。
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);
}
今はまったく私は私でそれを起動しようとするたびに、それがフリーズ私のサービスを起動するたびなどの作業方法を見ていない場合:私のサービスはThrでを使用するために取得することはありません意味
var client = server.AcceptTcpClient();
eadまたは私の仕事方法.. 以前のログから私のループを入力してからサービスをタイムアウトすることがわかります
'startServer'を呼び出すものが明確ではありません。 'OnStart'メソッドによって直接呼び出されているのであれば、それは問題です。ご覧の通り、 'AcceptTcpClient'はクライアントが現れるまでブロックしますが、' OnStart'が呼び出されたスレッドはあなたに属しておらず、ブロックしてはいけません。 –
私のonstartメソッドが "server.startServer();を呼び出しているのは間違いありません。 " しかし、私はそれを修正する方法を理解しているか分からないのですか? – Pilsneren