C# 套接字侦听器只响应一次

C# 套接字侦听器只响应一次,c#,.net,sockets,C#,.net,Sockets,我的套接字侦听端口,但仅第一次对消息作出反应,以后不再响应。 发生了什么?有什么建议可以解决吗?”因为我已经不知道该怎么办了。也许我监听端口的方式不合适 public partial class Listener { private void InitListener() { Logger.InitializeLogger(); var listenSocket = new Socket(AddressFamily.InterNetwork,

我的套接字侦听端口,但仅第一次对消息作出反应,以后不再响应。 发生了什么?有什么建议可以解决吗?”因为我已经不知道该怎么办了。也许我监听端口的方式不合适

public partial class Listener
{
    private void InitListener()
    {
        Logger.InitializeLogger();
        var listenSocket = new Socket(AddressFamily.InterNetwork,
                                         SocketType.Stream,
                                         ProtocolType.Tcp);
        var ipHostInfo = Dns.Resolve(Dns.GetHostName());
        var ipAddress = ipHostInfo.AddressList[0];
        var endPoint = new IPEndPoint(ipAddress, Settings.Default.Port);
        listenSocket.Bind(endPoint);
        listenSocket.Listen(Settings.Default.listenerMaxConnection);
        Logger.EventLogItem.WriteEntry(
            $"Listen to {ipAddress}:{Settings.Default.Port}");


        Logger.EventLogItem.WriteEntry("Connection Recieved");

        Thread thread = new Thread(o => Listen(listenSocket));
        thread.Start();

    }

    public void Listen(Socket socket)
    {
        var directory = @"C:\\Users\\*****\\Desktop\\bat files";
        var handler = socket.Accept();
        while (true)
        {
            try
            {
                while (handler.Connected)
                {
                    byte[] x = new byte[100000];
                    handler.Receive(x);
                    var command = new string(Encoding.UTF8.GetChars(x.Where(t => t != 0).ToArray()));
                    if (string.IsNullOrEmpty(command))
                    {
                        Logger.EventLogItem.WriteEntry("Warning: Empty string");
                        break;
                    }
                    Logger.EventLogItem.WriteEntry(command);
                    Console.WriteLine(command);
                    switch (command)
                    {
                        case "run":
                            var myFiles = Directory.GetFiles(directory, "*.bat");
                            foreach (var bat in myFiles)
                            {
                                Process.Start(bat);
                            }
                            Logger.EventLogItem.WriteEntry("By command: " + command +
                                                           " was executed an appropriate .bat file.");
                            break;
                        case "getThreads":
                            Logger.EventLogItem.WriteEntry("By command: " + command +
                                                           " was executed an appropriate .bat file.");
                            break;
                        case "stop":
                            Logger.EventLogItem.WriteEntry("By command: " + command +
                                                           " was executed an appropriate .bat file.");
                            break;
                        case "start":
                            Logger.EventLogItem.WriteEntry("By command: " + command +
                                                           " was executed an appropriate .bat file.");
                            break;
                        case "close":
                            Logger.EventLogItem.WriteEntry("By command: " + command +
                                                           " was executed an appropriate .bat file.");
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.EventLogItem.WriteEntry(
                    $"Exception happened in Listener: {ex.Message} - {ex.StackTrace}");
            }
        }
    }
    }

public partial class Listener
{
    public static Listener Handler { get; } = new Listener();

    public Listener()
    {
        var thread = new Thread(InitListener);
        thread.Start();
    }
}
这是我的主要任务

 Listener listener = Listener.Handler;

你的问题在于:

var handler = socket.Accept();
while (true)
{
    try
    {
        while (handler.Connected)

由于您的代码从未离开while循环,因此它从未循环接受下一个连接

您的问题在于:

var handler = socket.Accept();
while (true)
{
    try
    {
        while (handler.Connected)

由于您的代码从未离开while循环,因此它从未循环接受下一个连接

您接受了外部循环,因此它永远不会返回尝试下一个连接您的客户端如何连接到服务器?如果它发送数据并断开连接,则需要进入循环。看到一个@BugFinder谢谢!!我没有看到每一个time@slawekwin是的,谢谢!这是您在循环之外接受的问题,因此它永远不会返回尝试下一个连接您的客户端如何连接到服务器?如果它发送数据并断开连接,则需要进入循环。看到一个@BugFinder谢谢!!我没有看到每一个time@slawekwin是的,谢谢!这就是问题所在