我遇到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();
}
}
}
答案 0 :(得分:0)
可能尝试用真实IP替换IPAddress.Any至少是为了测试目的,只是为了确保......