我在使用 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();
}
}
}
最佳答案
至少出于测试目的,也许尝试用真实 IP 替换 IPAddress.Any,以确保...
关于c# - TCPListener 不接受连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447964/