c# - TCPListener 不接受连接

标签 c# .net tcp tcplistener

我在使用 TCPListener 时遇到问题。我在下面创建了这段代码,它可以与测试应用程序一起使用,但我无法让它接收来自生产环境的连接。在下图中,您可以看到 .44 不断尝试连接,但如控制台窗口输出所示,除了开始监听之外,没有收到任何连接。

我忽略了什么?

    public class TCPServer
{
    #region Privates
    private ILog log;
    private readonly string _connectionString = "";
    private readonly List<AgentState> _lAgentState;
    private readonly DateTime _lastUpdatedRecord = new DateTime();
    private readonly TcpClient _tcpClient;
    private readonly IPEndPoint _serverEndPoint;
    private int _messageNumber = 2;
    private TcpListener _tcpListener;
    private Thread _listenThread;

    #endregion

    public IEXHermes()
    {
        var methodName = new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name;

        try
        {
            log = LogManager.GetLogger("Logger");
            log.Info("Class Starting");
            _connectionString = Properties.Settings.Default.HN_ConnectionString;
            _lAgentState = getInitialState();
            _lastUpdatedRecord = _lAgentState.Max(w => w.actionLocalTime);



            Int32 iexPort = Int32.Parse(Properties.Settings.Default.IEX_Port);
            _tcpListener = new TcpListener(IPAddress.Any, iexPort);
            log.Debug("Server Open on Server: " + IPAddress.Any);
            log.Debug("Server Open on Port: " + iexPort);
            _listenThread = new Thread(listenForClients);
            _listenThread.Start();

        }
        catch (Exception ex)
        {

            log.FatalFormat("{0} - {1} \n {2}", methodName, ex.Message, ex.StackTrace);
        }
    }

    private void listenForClients()
    {
        var methodName = new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name;
        log.Debug(methodName + " Starting");

        try
        {

            log.Debug(methodName + " - Listening Started");
            _tcpListener.Start();

            while (true)
            {
                try
                {
                    var client = _tcpListener.AcceptSocket();
                    var clientThread = new Thread(handleClientComm);
                    clientThread.Start(client);
                }
                catch (Exception ex)
                {
                    log.FatalFormat("{0} - {1} \n {2}", methodName, ex.Message, ex.StackTrace);
                }

            }
        } catch (Exception ex)
        {
            log.FatalFormat("{0} - {1} \n {2}", methodName, ex.Message, ex.StackTrace); 
        }
        log.Debug(methodName + ": Listener Closer");
    }

    private void handleClientComm(object client)
    {
        var methodName = new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name;
        var tcpClient = (TcpClient)client;
        log.Debug(methodName + ": New Connection Established");
        try
        {

            var clientStream = tcpClient.GetStream();
            var message = new byte[4096];

            while (true)
            {
                var bytesRead = 0;

                try
                {
                    bytesRead = clientStream.Read(message, 0, 4096);
                }
                catch
                {
                    break;
                }

                if (bytesRead == 0)
                {
                    break;
                }

                var encoder = new ASCIIEncoding();
                var a = encoder.GetString(message, 0, bytesRead);
                Console.WriteLine("Recieved: " + a.ToUpper());

                if (a.ToUpper().Contains("INIT"))
                {    
                    a = sessionInitialize(); 
                } 
                    tcpClient.Client.Send(Encoding.UTF8.GetBytes(a));

                Console.WriteLine("Sent: " + a);

            }


        } 
        catch (Exception ex)
        {
            log.FatalFormat("{0} - {1} \n {2}", methodName, ex.Message, ex.StackTrace);   
        } 
        finally
        {
            tcpClient.Close();
        }
    }
}

Wireshark Capture

最佳答案

至少出于测试目的,也许尝试用真实 IP 替换 IPAddress.Any,以确保...

关于c# - TCPListener 不接受连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447964/

相关文章:

c# - 等待和异步阻塞 UI

macos - 如何在 Mac OS X 中加载不同的拥塞控制算法?

c# - SQL CLR - 当前上下文的 "Static"变量

c# - 为什么这个正则表达式在 .NET 中会失败?

java - .net webservices 使用复杂类型与其他平台,例如 java

asp.net - 如何从另一台计算机访问wcf服务?

linux - Linux 内核中 TCP-socket 和 tcp_fin() 的关闭/

c# - Autofac - 构建前解决

c# - 递归触发 SizeChanged 事件

c# - 如何使这些 foreach 循环高效?