TCPListener不接受连接 [英] TCPListener Not Accepting Connection

查看:116
本文介绍了TCPListener不接受连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用TCPListener时遇到问题.我已经在下面创建了此代码,并且该代码可用于测试应用程序,但无法从生产包装盒中接收连接.在下面的图像中,您可以看到.44一直在尝试进行连接,但是从控制台窗口输出中可以看到,除了侦听开始"以外,没有收到任何连接.

I'm having an issue with a TCPListener. I have created this code below and it works with a test application, but I can't get it to receive the connection from the production box. In the image below you can see .44 is continuously attempting to connect, but as seen in the Console window output, no connection is ever received beyond the 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();
        }
    }
}

推荐答案

也许尝试用真实IP替换IPAddress.至少可以用于测试目的,只是为了确保...

maybe try to replace IPAddress.Any by the real IP at least for testing purpose, just to be sure...

这篇关于TCPListener不接受连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆