class TwinCatTCPServer
{
public static void tcpClient()
{
IPAddress ipAdd = System.Net.IPAddress.Parse(/*IP地址*/"127.0.0.1");
int port = 8080;
//反复连接服务端(假如断开的话)
while(true)
{
Console.WriteLine("客户端启动……");
TcpClient client = new TcpClient();
try
{
//与服务器连接
client.Connect(ipAdd, port);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
// 打印连接到的服务端信息
Console.WriteLine("已经成功与客户端建立连接!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
NetworkStream ns = client.GetStream();
int dataRec;
while (client.Connected)
{
for(int i = 0;i<8;i++)
{
dataRec = ns.ReadByte();
publicValue.tasks.Enqueue(dataRec);
}
}
}
}
static void Main(string[] args)
{
//初始化全局变量
publicValue.isConnected = false;
publicValue.tasks.Clear();
//启动收取外部信号子线程
ThreadStart clientStart = new ThreadStart(tcpClient);
Thread clientThread = new Thread(clientStart);
clientThread.IsBackground = true;
clientThread.Start();
//以下的无关代码省略
主要是需要先创建一个ThreadStart对象,然后再利用这个对象创建Thread,ThreadStart对象的参数是一个函数(本例中是public static void函数),然后Thread对象调用Start()方法开始执行。
如何在主程序关闭的时候自动关闭子线程?
此问题一般出现在子线程用于通信的情况下,设置了无限循环,无法自动结束的情况
解决方法
clientThread.IsBackground = true;
将子线程Thread对象的IsBackGround属性设置为true,此时主线程被关闭的时候,系统会自动调用子线程的Abort()方法,关闭子线程