【发布时间】:2019-10-20 15:17:48
【问题描述】:
我目前使用 c#.net windows 窗体开发一个 TCP 侦听器。它似乎在一段时间后停止侦听,当客户端随后发出请求时它不侦听。不抛出异常。
namespace WindowsTCPListener
{
public partial class Form1 : Form
{
TcpListener listener;
public Form1()
{
InitializeComponent();
Thread t = new Thread(() =>
{
ListenTCPPort();
});
t.Start();
}
public void ListenTCPPort()
{
string ipAddress, portNumber, mqName;
ipAddress = ConfigurationManager.AppSettings.Get("IP").ToString().Trim();
portNumber = ConfigurationManager.AppSettings.Get("PORT").ToString().Trim();
mqName = ConfigurationManager.AppSettings.Get("MSMQ").ToString().Trim();
int j;
int port = Int32.TryParse(portNumber, out j) ? j : 0;
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipAddress.ToString()), port);
listener = new TcpListener(ep);
listener.Start();
try
{
this.listBox1.Items.Add("Started listening requests at: " + ipAddress.ToString() + ":" + portNumber.ToString());
}
catch (Exception) {}
while (true)
{
try
{
const int bytesize = 1024 * 1024;
string message = null;
byte[] buffer = new byte[bytesize];
TcpClient sender = listener.AcceptTcpClient();
sender.GetStream().Read(buffer, 0, bytesize);
message = cleanMessage(buffer);
byte[] bytes = System.Text.Encoding.Default.GetBytes(message);
string data = System.Text.Encoding.Default.GetString(bytes);
try
{
this.listBox1.Items.Add("Incoming : " + data.ToString());
}
catch (Exception) {}
string output = sendMessage(data, sender, mqName);
this.listBox1.Items.Add(output);
sender.Close();
}
catch (Exception e)
{
try
{
this.listBox1.Items.Add("Exception : " + e.ToString());
}
catch (Exception) { }
}
}
}
}
}
【问题讨论】:
-
可能没有直接关系,但不要这样做:
catch (Exception) {}。至少记录异常。 -
你能打印出你收到的所有异常吗?
-
“当客户端随后发出请求时” 客户端是重新连接还是仅在同一个连接上发送(在第一次之后将关闭)?
-
顺便说一句:您正在从非 UI 线程修改 UI 元素。那就麻烦了。
-
我不会在非 UI 线程上这样做
this.listBox1.Items.Add。
标签: c# winforms tcplistener