私は、このクラスのすべての受信TCP/IPストリームを収集するWindowsサービスを開発中です。サービスOnStart()voidから開始されます。C#TCP/IPが正しく動作しません。
しかし、メッセージがの第2の送信者から届くと、通信全体が停止します。サービスは、再起動するまで、単一の接続に反応しません。
public class TCPIP
{
public static Receiver rc = new Receiver();
public class Receiver
{
public delegate void ReceivedEventHandler(string ReceivedText, string Sender);
public event ReceivedEventHandler Received;
public void Start()
{
System.Threading.Thread th = new System.Threading.Thread(internals);
th.Start();
}
private void internals()
{
TcpListener _listener = new TcpListener(1994);
_listener.Start();
while (true)
{
TcpClient rcclient = _listener.AcceptTcpClient();
StreamReader reader = new StreamReader(rcclient.GetStream());
string msg = "";
while (reader.Peek() > -1)
{
msg += Convert.ToChar(reader.Read()).ToString();
}
Received(msg, rcclient.Client.RemoteEndPoint.ToString().Split(Convert.ToChar(":"))[0]);
// Cleanup
rcclient.Close();
reader.Close();
}
}
誰もが、一つの後に占有されないようにする複数のエンドポイントからの接続に答えるために、このクラスを改善し、私を助けてもらえますか?
ありがとうございます。
トレースするとどうなりますか – BugFinder
_「受信したすべてのTCP/IPメッセージ」_ - TCPはメッセージではなくストリームを処理します。とにかく、すべてのパケットをキャプチャする場合は、C#で行うことができないネットワークフィルタドライバが必要です。 – CodeCaster
ありがとう、そしてええ、私は1つのポートを話しているだけですが、複数のエンドポイントについて話しています。 – Fabi