TCPListener不接受连接

时间:2011-12-09 15:46:37

标签: c# .net tcp tcplistener

我遇到TCPListener问题。我在下面创建了这个代码,它适用于测试应用程序,但我无法从生产框接收连接。在下面的图片中,您可以看到.44正在不断尝试连接,但是在控制台窗口输出中看到,在Listening Started之外没有收到任何连接。

我在俯瞰什么?

    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

1 个答案:

答案 0 :(得分:0)

可能尝试用真实IP替换IPAddress.Any至少是为了测试目的,只是为了确保......