Я работаю над службой Windows, которая должна собирать все входящие потоки TCP/IP с этим классом. Он запускается из служб OnStart() void.C# TCP/IP не работает должным образом
Однако я столкнулся с тем, что, когда сообщения поступают от второго отправителя , вся связь перестает работать. Затем служба не реагирует на одно соединение, пока вы его не перезапустите.
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
Спасибо, да, я говорю только один порт, но для нескольких конечных точек. – Fabi