c#读取COM端口

//初始化,打开/关闭端口
bool Init_SerialPort()
{
	bool temp = false;
	try
	{
		if (null == serialport)
		{
			serialport = new System.IO.Ports.SerialPort();
			serialport.PortName = "COM1";
			serialport.BaudRate = 9600;
			serialport.Parity = System.IO.Ports.Parity.None;
			serialport.DataBits = 8;
			serialport.StopBits = System.IO.Ports.StopBits.One;
			serialport.Handshake = System.IO.Ports.Handshake.RequestToSendXOnXOff;
			serialport.ReceivedBytesThreshold = 6; //接收到6个字符才出发comPort_DataReceived
			serialport.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
		}
		if (serialport.IsOpen)
		{
			serialport.Close();
			simpleButton1.Text = "端口已关闭!";
		}
		else
		{
			serialport.Open();
			simpleButton1.Text = "端口已打开!";
		}
		temp = true;
	}
	catch (Exception e)
	{
		//SetMsgText("COM口无效,无法打开COM!");
		MessageBox.Show("打开端口失败: " + e.Message);
	}
	return temp;
}

//端口扫描线程接收到数据
void comPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
	string dataReceived = serialport.ReadExisting();
	this.Invoke(new ShowDelegate(Show), dataReceived); //线程间调用,使用委托
}

//线程间调用,使用委托
private delegate void ShowDelegate(string dataReceived);

//主线程接收到数据
public void Show(string dataReceived)
{
	memoEdit1.Text = dataReceived;
}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中实现端口转发可以使用 TcpListener 和 TcpClient 类,而断点传输文件可以使用 FileStream 和 BinaryReader/BinaryWriter 类。 以下是一个简单的示例代码,演示了如何在本地端口监听并转发传入的连接: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; class PortForwarder { static void Main(string[] args) { int localPort = 1234; // 本地监听端口 string remoteHost = "example.com"; // 转发目标主机 int remotePort = 5678; // 转发目标端口 TcpListener listener = new TcpListener(IPAddress.Any, localPort); listener.Start(); Console.WriteLine("Listening on port " + localPort); while (true) { TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("Accepted connection from " + client.Client.RemoteEndPoint); TcpClient remoteClient = new TcpClient(remoteHost, remotePort); Console.WriteLine("Connected to remote host " + remoteHost + ":" + remotePort); // 开启一个后台线程,将两个连接之间的数据进行转发 System.Threading.Thread thread = new System.Threading.Thread(() => { try { using (var localStream = client.GetStream()) using (var remoteStream = remoteClient.GetStream()) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = localStream.Read(buffer, 0, buffer.Length)) > 0) { remoteStream.Write(buffer, 0, bytesRead); } } } catch (Exception ex) { Console.WriteLine("Error: " + ex.ToString()); } finally { client.Dispose(); remoteClient.Dispose(); } }); thread.IsBackground = true; thread.Start(); } } } ``` 要实现断点传输文件,可以根据需要进行读取和写入文件的偏移量,并在 TcpClient 之间进行数据传输。以下是一个简单的示例代码: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; class FileTransfer { static void Main(string[] args) { string localFilePath = "localfile.dat"; // 本地文件路径 string remoteHost = "example.com"; // 文件接收主机 int remotePort = 5678; // 文件接收端口 long offset = 0; // 起始偏移量 TcpClient client = new TcpClient(remoteHost, remotePort); Console.WriteLine("Connected to remote host " + remoteHost + ":" + remotePort); using (var fileStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read)) using (var reader = new BinaryReader(fileStream)) using (var writer = new BinaryWriter(client.GetStream())) { // 将文件读取指定偏移量 fileStream.Seek(offset, SeekOrigin.Begin); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0) { writer.Write(buffer, 0, bytesRead); offset += bytesRead; Console.WriteLine("Sent " + bytesRead + " bytes at offset " + offset); } } client.Dispose(); } } ``` 注意,以上代码仅为示例,实际应用中需要考虑错误处理、超时、流关闭等情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值