无法从传输连接中读取数据: 你的主机中的软件中止了一个已建立的连接。。
请问是什么原因呀!到底是代码哪里出现问题了,应该怎么改
public class MeasuringCameraMethod
{
private string FileName;
public Logger logger = new Logger(); // 日志
public MeasuringCameraClass measuring;
public TcpClient client = null;
private NetworkStream stream = null; // 将 NetworkStream 设为类的成员变量
public MeasuringCameraMethod()
{
measuring = new MeasuringCameraClass();
FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DataOrigin");
// 完整的文件路径
string filePath = Path.Combine(FileName, "MeasuringCameraClass.json"); // 量方相机
// 感应器 如果文件存在,则查询数据并回填
if (File.Exists(filePath))
{
// 读取文件中的 JSON 数据
string jsonData = System.IO.File.ReadAllText(filePath);
// 将 JSON 数据反序列化为 MeasuringCameraClass 对象
MeasuringCameraClass mea = JsonConvert.DeserializeObject<MeasuringCameraClass>(jsonData);
// 设置回填后的值到相应的控件中
measuring.MeasuringIp = mea.MeasuringIp;
measuring.MeasuringPort = mea.MeasuringPort;
}
}
/// <summary>
/// 量方相机打开
/// </summary>
/// <returns></returns>
public async Task<bool> CameraOpen()
{
try
{
// 创建 TCP 监听器
string ip = measuring.MeasuringIp;
int port = Convert.ToInt32(measuring.MeasuringPort);
// 创建 TcpListener 对象
TcpListener listener = new TcpListener(IPAddress.Parse(ip), port);
listener.Start();
logger.Log($"量方服务端已启动,正在监听: {ip}:{port}");
// 设置一个任务来接受客户端连接
var acceptTask = listener.AcceptTcpClientAsync();
// 等待连接或超时
var delayTask = Task.Delay(3000);
var completedTask = await Task.WhenAny(acceptTask, delayTask);
// 检查是否是接受连接的任务完成
if (completedTask == acceptTask)
{
client = await acceptTask; // 获取客户端连接
logger.Log($"客户端连接成功: {((IPEndPoint)client.Client.RemoteEndPoint).Address}:{((IPEndPoint)client.Client.RemoteEndPoint).Port}");
// 获取网络流
stream = client.GetStream();
return true; // 连接成功
}
else
{
logger.Log("量方服务端连接超时!");
MessageBox.Show("量方相机连接失败,请检查量方软件是否开启!");
return false;
}
}
catch (TimeoutException te)
{
logger.Log("量方服务端连接超时:" + te.Message);
return false; // 连接超时
}
catch (SocketException se)
{
logger.Log($"量方服务端连接失败: {se.Message}");
return false; // 连接失败
}
catch (Exception ex)
{
logger.Log($"量方服务端发生错误: {ex.Message}");
return false; // 其他错误
}
}
/// <summary>
/// 处理接收到的指令并返回响应
/// </summary>
public string CameraRead(string message = "#trig")
{
if (stream == null)
{
logger.Log("未获取到网络流。请确保客户端已连接。");
return "";
}
try
{
// 将要发送的数据转换为字节并发送
byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// 接收返回数据
byte[] buffer = new byte[1024]; // 可以根据实际需求调整缓冲区大小
int bytesRead = stream.Read(buffer, 0, buffer.Length);
// 将接收到的字节转换为字符串
string response = System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead);
logger.Log($"接收到的回复: {response}");
return response;
}
catch (Exception ex)
{
logger.Log($"发送数据或接收回复时发生错误: {ex.Message}");
return "";
}
}
/// <summary>
/// 关闭与量方相机的连接
/// </summary>
public void CameraClose()
{
try
{
// 检查客户端是否已连接
if (client != null && client.Connected)
{
// 关闭网络流
if (stream != null)
{
stream.Close();
logger.Log("网络流已关闭。");
}
// 关闭客户端连接
client.Close();
logger.Log("量方相机客户端已成功关闭。");
}
else
{
logger.Log("量方相机客户端未连接,无法关闭。");
}
}
catch (Exception ex)
{
logger.Log($"关闭量方相机时发生错误: {ex.Message}");
}
}
}