我正在尝试使用TcpClient
从远程服务器进行读取,因此我想做到这一点。
我创建了一个标准的Forms.Timer
,它每秒滴答一次,并从服务器中调用带有轮询的函数。
我能够从服务器读取信息,即,我确实设法查看了buffer
中的值
但是由于某种原因,我得到了(我猜想是从Delay)
起5秒后
在未连接的插座上不允许执行此操作
这是我与服务器功能的连接
public static async Task<string> readFromPLC()
{
using (var client = new System.Net.Sockets.TcpClient())
{
Task connectTask = client.ConnectAsync(ipAddress, port);
Task timeoutTask = Task.Delay(millisecondsDelay: 5000);
if (await Task.WhenAny(connectTask, timeoutTask) == timeoutTask)
{
// throw new TimeoutException("could not connect to the PLC");
}
using (var reader = new System.IO.StreamReader(client.GetStream()))
{
char[] buffer = new char[1024];
while ((await reader.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
sb.Append(String.Join("", buffer));
}
return sb.ToString();
}
}
}
这是我的计时器功能
private async void readFromPLCTimer_Tick(object sender, EventArgs e)
{
string res = String.Empty;
bool plcStatus = false;
try
{
res = await PLCHelper.readFromPLC();
plcStatus = true;
}
catch (Exception ex)
{
res = ex.Message;
}
setPLCstatus(plcStatus);
latestCommandTxtBox.AddLine(res);
}