实例介绍
【实例简介】
usb转串口,扫描枪串口分析工具
读取扫描枪扫描信息
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace 串口调试助手 { public partial class Form1 : Form { long Rxd = 0, Txd = 0; bool StopShowReceived = false; bool ShowInHex = false; bool ShowInChar = true; bool ShowInBin = false; bool SendHEX = false; bool SendChar = true; bool SendBin = false; bool AutoClear = false; long BufferSize = 102400; StringBuilder ReceivePool; StringBuilder SendPool; /* private StringBuilder Convert2ASCII(int BaseForm) { StringBuilder Result; String[] Content; if (ShowInHex) Content = TXB_Send.Text.TrimEnd().Split(' '); else { Content = TXB_Send.Text.TrimEnd().Replace(" ",",").Replace(" ","").Split(','); } Result = new StringBuilder(Content.Length); if (Content.Length == 1 && Content[0]=="") return Result; for (Int64 Index = 0; Index < Content.Length;Index ) { if(Content[Index]!=" ") Result.Append(Convert.ToChar(Convert.ToByte(Content[Index], BaseForm))); } return Result; } private StringBuilder Convert2BIN(int BaseForm) { StringBuilder Result; String[] Hex2BinTable = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; int High, Low; if (TXB_Send.Text.TrimEnd() == "") return new StringBuilder(); if (BaseForm==16) { String[] Content = TXB_Send.Text.TrimEnd().Split(' '); String temp; Result = new StringBuilder(Content.Length); for (Int64 Index = 0; Index < Content.Length;Index ) { if(Content[Index]!=" ") { High = Convert.ToByte(Content[Index], BaseForm) / 16; Low = Convert.ToByte(Content[Index], BaseForm) % 16; temp = String.Format("{0} {1} ", Hex2BinTable[High], Hex2BinTable[Low]); Result.Append(temp); } } } else { char []TempCharArray=TXB_Send.Text.ToCharArray(); String temp; Result = new StringBuilder(TempCharArray.Length); foreach (char TempChar in TempCharArray) { High = Convert.ToInt16(TempChar) / 16; Low = Convert.ToInt16(TempChar) % 16; temp = String.Format("{0} {1} ", Hex2BinTable[High], Hex2BinTable[Low]); Result.Append(temp); } } return Result; } private StringBuilder Convert2HEX(Int16 BaseForm) { StringBuilder Result; if(BaseForm==2) { String[] Content = TXB_Send.Text.TrimEnd().Replace(" ", ",").Replace(" ", "").Split(','); if(Content.Length==1 && Content[0]=="") return new StringBuilder(); Result = new StringBuilder(Content.Length); foreach (String TempString in Content) { if(TempString!="") { Result.Append(String.Format("{0:X2} ", Convert.ToByte(TempString, 2))); } } } else { if (TXB_Send.Text.Length == 0) return new StringBuilder(); char[] TempCharArray = TXB_Send.Text.ToCharArray(); Result=new StringBuilder(TempCharArray.Length); foreach(char TempChar in TempCharArray) { Result.Append(string.Format("{0:X2} ", Convert.ToByte(TempChar))); } } return Result; } */ private StringBuilder ConvertReceiveTo(int BaseForm) { StringBuilder Result = new StringBuilder(ReceivePool.Length / 3); String[] ContentString = ReceivePool.ToString().Split(' '); foreach (String TempString in ContentString) { if(BaseForm==0)//要转换为字符串 { if (TempString != " " && TempString != "") { Result.Append(Convert.ToChar(Convert.ToByte(TempString, 16))); } } if(BaseForm==16) { Result = ReceivePool; } if(BaseForm==2) { String[] Hex2BinTable = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; int High, Low; String temp; if (TempString != " " && TempString != "") { High = Convert.ToByte(TempString, 16) / 16; Low = Convert.ToByte(TempString, 16) % 16; temp = String.Format("{0} {1} ", Hex2BinTable[High], Hex2BinTable[Low]); Result.Append(temp); } } } return Result; } private StringBuilder ConvertSendTo(int BaseForm) { StringBuilder Result = new StringBuilder(ReceivePool.Length / 3); String[] ContentString = ReceivePool.ToString().Split(' '); foreach (String TempString in ContentString) { if (BaseForm == 0)//要转换为字符串 { if (TempString != " " && TempString != "") { Result.Append(Convert.ToChar(Convert.ToByte(TempString, 16))); } } if (BaseForm == 16) { Result = ReceivePool; } if (BaseForm == 2) { String[] Hex2BinTable = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; int High, Low; String temp; if (TempString != " " && TempString != "") { High = Convert.ToByte(TempString, 16) / 16; Low = Convert.ToByte(TempString, 16) % 16; temp = String.Format("{0} {1} ", Hex2BinTable[High], Hex2BinTable[Low]); Result.Append(temp); } } } return Result; } public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls=false; ReceivePool = new StringBuilder(); } private void Form1_Load(object sender, EventArgs e) { CBB_BaudRate.SelectedIndex = 3; CBB_DataBits.SelectedIndex = 0; CBB_PARATY.SelectedIndex = 0; CBB_StopBits.SelectedIndex = 0; for (int i = 1; i <= 255;i ) { CBB_Port.Items.Add("COM" i.ToString()); } CBB_Port.SelectedIndex = 0; this.Size = new Size(402, 467); } private void BRN_Open_Click(object sender, EventArgs e) { if (serialPort1.IsOpen==false) { try { serialPort1.BaudRate = Convert.ToInt32(CBB_BaudRate.Text); serialPort1.PortName = CBB_Port.Text; if (CBB_PARATY.SelectedIndex == 0) serialPort1.Parity = System.IO.Ports.Parity.None; else if (CBB_PARATY.SelectedIndex == 1) serialPort1.Parity = System.IO.Ports.Parity.Odd; else if (CBB_PARATY.SelectedIndex == 2) serialPort1.Parity = System.IO.Ports.Parity.Even; serialPort1.DataBits = Convert.ToInt16(CBB_DataBits.Text); if (CBB_StopBits.SelectedIndex == 0) serialPort1.StopBits = System.IO.Ports.StopBits.One; else serialPort1.StopBits = System.IO.Ports.StopBits.Two; } catch (System.Exception ex) { MessageBox.Show("打开端口出错,原因是" ex.Message.ToString()); return; } try { serialPort1.Open(); LBL_PortState.Text = CBB_Port.SelectedItem.ToString() "已打开"; PCB_PortState.BackColor = Color.Red; BTN_Open.Text = "关闭"; CBB_BaudRate.Enabled = false; CBB_Port.Enabled = false; CBB_DataBits.Enabled = false; CBB_PARATY.Enabled = false; CBB_StopBits.Enabled = false; } catch (System.Exception ex) { LBL_PortState.Text = "端口关闭"; PCB_PortState.BackColor = Color.Gray; CBB_BaudRate.Enabled = true; CBB_Port.Enabled = true; CBB_DataBits.Enabled = true; CBB_PARATY.Enabled = true; CBB_StopBits.Enabled = true; MessageBox.Show("端口无法打开,可能是不存在或被占用。"); return; } } else { serialPort1.DiscardInBuffer(); serialPort1.Close(); BTN_Open.Text = "打开"; LBL_PortState.Text = "端口关闭"; PCB_PortState.BackColor = Color.Gray; CBB_BaudRate.Enabled = true; CBB_Port.Enabled = true; CBB_DataBits.Enabled = true; CBB_PARATY.Enabled = true; CBB_StopBits.Enabled = true; } } private void BTN_Clear_Click(object sender, EventArgs e) { TXB_Receive.Clear(); ReceivePool.Remove(0, ReceivePool.Length); } private void CKB_Stop_CheckedChanged(object sender, EventArgs e) { StopShowReceived = CKB_Stop.Checked; } private void CKB_HEX_CheckedChanged(object sender, EventArgs e) { } private void BTN_Send_Click(object sender, EventArgs e) { if (serialPort1.IsOpen == false) { MessageBox.Show("串口没有打开。"); return; } if (SendChar == true) { try { serialPort1.Write(TXB_Send.Text); Txd = TXB_Send.Text.Length; LBL_TXD.Text = "发送: " Txd.ToString() "字节"; } catch (System.Exception ex) { MessageBox.Show("发送出现错误,请尝试重新发送。如果错误仍然存在,请关闭程序后重新启动串口调试助手。"); return; } } else if(SendHEX==true) { String TempData = TXB_Send.Text; bool IlligalChar = false; while (TempData.IndexOf(" ") != -1) TempData = TempData.Replace(" ", " "); string[] SendBuffer = TempData.TrimStart().TrimEnd().Split(' '); Byte[] B=new Byte[SendBuffer.Length]; int Count = 0; try { foreach (string temp in SendBuffer) { if(temp!=" ") { if (temp.Length <= 2) { B[Count] = Convert.ToByte(temp, 16); Count ; } else IlligalChar = true; } } serialPort1.Write(B, 0, Count); Txd = Count; LBL_TXD.Text = "发送: " Txd.ToString() "字节"; if (IlligalChar == true) { MessageBox.Show("输入中包含1字节数据无法表示的内容。\r\n错误数据已经被丢弃,但其它数据仍然被发送。", "包含错误数据", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (System.Exception ex) { MessageBox.Show("发送出现错误,请尝试重新发送。如果错误仍然存在,请关闭程序后重新启动串口调试助手。"); return; } } else if(SendBin==true) { String TempData = TXB_Send.Text; bool IlligalChar = false; while (TempData.IndexOf(" ") != -1) TempData = TempData.Replace(" ", " "); string[] SendBuffer = TempData.TrimStart().TrimEnd().Split(' '); Byte[] B = new Byte[SendBuffer.Length]; int Count = 0; try { foreach (string temp in SendBuffer) { if (temp != " ") { if (temp.Length <= 8) { B[Count] = Convert.ToByte(temp, 2); Count ; } else IlligalChar = true; } } serialPort1.Write(B, 0, Count); Txd = Count; LBL_TXD.Text = "发送: " Txd.ToString() "字节"; if(IlligalChar==true) { MessageBox.Show("输入中包含1字节数据无法表示的内容。\r\n错误数据已经被丢弃,但其它数据仍然被发送。", "包含错误数据", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (System.Exception ex) { MessageBox.Show("发送出现错误,请尝试重新发送。如果错误仍然存在,请关闭程序后重新启动串口调试助手。"); return; } } } long BufferCount = 0; private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { { int Count=serialPort1.BytesToRead; byte[] Buffer = new byte[Count]; StringBuilder SB = new StringBuilder(); BufferCount = Count; Rxd = Count; if(AutoClear==true) { if (BufferCount >= BufferSize || ReceivePool.Length >= 2147483647) { TXB_Receive.Clear(); ReceivePool.Remove(0, ReceivePool.Length); BufferCount = 0; } } try { serialPort1.Read(Buffer, 0, Count); foreach(Byte TempByte in Buffer) { ReceivePool.Append(String.Format("{0:X2}", TempByte)); ReceivePool.Append(" "); } if (StopShowReceived == true) { LBL_RXD.Text = "接收: " Rxd.ToString() "字节"; return; } if (ShowInChar == true)//字符方式显示 { foreach (Byte TempByte in Buffer) { //if (TempByte == 13) // continue; SB.Append(Convert.ToChar(TempByte)); } TXB_Receive.AppendText(SB.ToString()); LBL_RXD.Text = "接收: " Rxd.ToString() "字节"; } else if (ShowInHex == true)//十六进制显示 { for (int i = 0; i < Count; i ) { String temp = String.Format("{0:X2} ", Buffer[i]); TXB_Receive.AppendText(temp); } LBL_RXD.Text = "接收: " Rxd.ToString() "字节"; } else if (ShowInBin == true)//二进制显示 { for (int i = 0; i < Count; i ) { String[] Hex2BinTable = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; int High, Low; String temp; High = Buffer[i] / 16; Low = Buffer[i] % 16; temp = String.Format("{0} {1} ", Hex2BinTable[High], Hex2BinTable[Low]); TXB_Receive.AppendText(temp); } LBL_RXD.Text = "接收: " Rxd.ToString() "字节"; } //Application.DoEvents(); //TXB_Receive.ScrollToCaret(); } catch (System.Exception ex) { MessageBox.Show("数据接收时发生错误,原因是" ex.Message.ToString()); return; } } } private void 发送区ToolStripMenuItem_Click(object sender, EventArgs e) { TXB_Send.Clear(); } private void 接收区ToolStripMenuItem_Click(object sender, EventArgs e) { TXB_Receive.Clear(); } private void CKB_Auto_CheckedChanged(object sender, EventArgs e) { if(CKB_Auto.Checked==true) { timer1.Interval = Convert.ToInt16(TXB_AutoFre.Text); timer1.Start(); timer1.Enabled = true; label3.Enabled = true; label4.Enabled = true; BTN_AutoSendFreOK.Enabled = true; TXB_AutoFre.Enabled = true; } else { timer1.Stop(); timer1.Enabled = false; label3.Enabled = false; label4.Enabled = false; BTN_AutoSendFreOK.Enabled = false; TXB_AutoFre.Enabled = false; } } private void BTN_AutoSendFreOK_Click(object sender, EventArgs e) { timer1.Stop(); timer1.Interval = Convert.ToInt16(TXB_AutoFre.Text); timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { if (serialPort1.IsOpen == false) { timer1.Enabled = false; CKB_Auto.Checked = false; MessageBox.Show("串口没有打开。"); return; } if (SendChar == true) { serialPort1.Write(TXB_Send.Text); Txd = TXB_Send.Text.Length; LBL_TXD.Text = "发送: " Txd.ToString() "字节"; } else if (SendHEX == true) { string[] SendBuffer = TXB_Send.Text.Split(' '); Byte[] B = new Byte[SendBuffer.Length]; int Count = 0; try { foreach (string temp in SendBuffer) { B[Count] = Convert.ToByte(temp, 16); Count ; } } catch (System.Exception ex) { MessageBox.Show("输入中包含非法字符。" ex.Message); return; } try { serialPort1.Write(B, 0, Count); Txd = Count; LBL_TXD.Text = "发送: " Txd.ToString() "字节"; } catch (System.Exception ex) { MessageBox.Show("发送出现错误,请尝试重新发送。如果错误仍然存在,请关闭程序后重新启动串口调试助手。"); return; } } else if (SendBin == true) { string[] SendBuffer = TXB_Send.Text.Split(' '); Byte[] B = new Byte[SendBuffer.Length]; int Count = 0; try { foreach (string temp in SendBuffer) { B[Count] = Convert.ToByte(temp, 2); Count ; } } catch (System.Exception ex) { MessageBox.Show("输入中包含非法字符。\r\n" ex.Message); return; } try { serialPort1.Write(B, 0, Count); Txd = Count; LBL_TXD.Text = "发送: " Txd.ToString() "字节"; } catch (System.Exception ex) { MessageBox.Show("发送出现错误,请尝试重新发送。如果错误仍然存在,请关闭程序后重新启动串口调试助手。"); return; } } } private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e) { Rxd = 0; Txd = 0; LBL_TXD.Text = "发送: 0字节"; LBL_RXD.Text = "接收: 0字节"; } private void 统计计数ToolStripMenuItem_Click(object sender, EventArgs e) { Rxd = 0; Txd = 0; LBL_TXD.Text = "发送: 0字节"; LBL_RXD.Text = "接收: 0字节"; } private void CKB_HEX_CheckedChanged_1(object sender, EventArgs e) { if (RDB_HEX.Checked == false) return; StringBuilder SB = new StringBuilder(); /* if (ShowInChar) SB = ConvertReceiveTo(0); else SB = ConvertReceiveTo(2); */ SB = ConvertReceiveTo(16); TXB_Receive.Clear(); TXB_Receive.Text = SB.ToString(); ShowInHex = RDB_HEX.Checked; ShowInChar = !ShowInHex; ShowInBin = !ShowInHex; } private void RDB_Char_CheckedChanged(object sender, EventArgs e) { if (RDB_Char.Checked == false) return; StringBuilder SB = new StringBuilder(); /* if (ShowInHex) SB = ConvertReceiveTo(16); else SB = ConvertReceiveTo(2);*/ SB = ConvertReceiveTo(0); TXB_Receive.Clear(); TXB_Receive.Text = SB.ToString(); ShowInChar = RDB_Char.Checked; ShowInHex = !ShowInChar; ShowInBin = !ShowInChar; } private void RDB_Bin_CheckedChanged(object sender, EventArgs e) { if (RDB_Bin.Checked == false) return; StringBuilder SB = new StringBuilder(); /* if (ShowInHex) SB = Convert2BIN(16); else SB = Convert2BIN(0); */ SB = ConvertReceiveTo(2); TXB_Receive.Clear(); TXB_Receive.Text = SB.ToString(); ShowInBin = RDB_Bin.Checked; ShowInHex = !ShowInBin; ShowInChar = !ShowInBin; } private void RDB_SendChar_CheckedChanged(object sender, EventArgs e) { SendChar = RDB_SendChar.Checked; if (SendChar == true) { TXB_Send.Text = "By Walson, Sharp Arrow Studio"; } } private void Send_Bin_KeyPress(object sender, KeyPressEventArgs e) { if (!((e.KeyChar >= '0' && e.KeyChar <= '1') || e.KeyChar == (char)22 || e.KeyChar == (char)3 || e.KeyChar == ' ')) { if (e.KeyChar != (char)Keys.Enter && e.KeyChar != (char)Keys.Back /*&& e.KeyChar != (char)Keys.Delete*/) { e.Handled = true; MessageBox.Show("输入的字符包含非二进制数字。"); return; } } } private void RDB_SendBIN_CheckedChanged(object sender, EventArgs e) { SendBin = RDB_SendBIN.Checked; if (SendBin == true) { this.TXB_Send.KeyPress = new System.Windows.Forms.KeyPressEventHandler(this.Send_Bin_KeyPress); TXB_Send.Text = "00000000 00000001 00000010 00000011 00000100"; } else this.TXB_Send.KeyPress -= new System.Windows.Forms.KeyPressEventHandler(this.Send_Bin_KeyPress); } private void CKB_SendHEX_CheckedChanged(object sender, EventArgs e) { SendHEX = RDB_SendHEX.Checked; if (SendHEX == true) { this.TXB_Send.KeyPress = new System.Windows.Forms.KeyPressEventHandler(this.Send_HEX_KeyPress); TXB_Send.Text = "00 01 02 03 04 05 06 07 08 09 0A"; TXB_Send.CharacterCasing = CharacterCasing.Upper; } else { this.TXB_Send.KeyPress -= new System.Windows.Forms.KeyPressEventHandler(this.Send_HEX_KeyPress); TXB_Send.CharacterCasing = CharacterCasing.Normal; } //TXB_Send.Clear(); } private void Send_HEX_KeyPress(object sender, KeyPressEventArgs e) { //MessageBox.Show(e.KeyChar.ToString()); if (!((e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar >= 'a' && e.KeyChar <= 'f') || (e.KeyChar >= 'A' && e.KeyChar <= 'F') || e.KeyChar == (char)22 || e.KeyChar == (char)3 || e.KeyChar == ' ')) { if (e.KeyChar != (char)Keys.Enter && e.KeyChar != (char)Keys.Back /*&& e.KeyChar != (char)Keys.Delete*/) { e.Handled = true; MessageBox.Show("输入的字符包含非十六进制数字。"); } } } private void CKB_AutoClear_CheckedChanged(object sender, EventArgs e) { AutoClear = CKB_AutoClear.Checked; if(AutoClear==true) { BufferSize = Convert.ToInt32(TXB_BufferSize.Text); label5.Enabled = true; label6.Enabled = true; TXB_BufferSize.Enabled = true; BTN_BufferSizeOK.Enabled = true; } else { label5.Enabled = false; label6.Enabled = false; TXB_BufferSize.Enabled = false; BTN_BufferSizeOK.Enabled = false; } } private void BTN_BufferSizeOK_Click(object sender, EventArgs e) { BufferSize = Convert.ToInt32(Convert.ToDouble(TXB_BufferSize.Text) * 1024); if (BufferSize > 2147483647) { MessageBox.Show("缓冲区设置过大。缓冲区容量请不要超过2GB。"); BufferSize = 1024000; TXB_BufferSize.Text = "100"; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { serialPort1.Close(); } catch (System.Exception ex) { return; } } String SaveType = "ASCII"; private void 十六进制ToolStripMenuItem_Click(object sender, EventArgs e) { SaveType = "HEX"; SaveFile.Title = "保存为十六进制形式"; SaveFile.Filter = "文本文件|*.txt"; SaveFile.ShowDialog(); } private void 二进制ToolStripMenuItem_Click(object sender, EventArgs e) { SaveType = "BIN"; SaveFile.Title = "保存为二进制形式"; SaveFile.Filter = "文本文件|*.txt"; SaveFile.ShowDialog(); } private void aSCIIToolStripMenuItem_Click(object sender, EventArgs e) { SaveType = "ASCII"; SaveFile.Title = "保存为ASCII码形式"; SaveFile.Filter = "文本文件|*.txt"; SaveFile.ShowDialog(); } private void SaveFile_FileOk(object sender, CancelEventArgs e) { StringBuilder SB = new StringBuilder(); FileStream FS = new FileStream(SaveFile.FileName, FileMode.Create); StreamWriter SW = new StreamWriter(FS); switch (SaveType) { case "ASCII": { SB = ConvertReceiveTo(0); SW.Write(SB.ToString()); break; } case "BIN": { SB = ConvertReceiveTo(2); SW.Write(SB.ToString()); break; } case "HEX": { SW.Write(ReceivePool.ToString()); break; } } SW.Close(); FS.Close(); } private void toolStripSplitButton2_ButtonClick(object sender, EventArgs e) { SaveType = "ASCII"; SaveFile.Title = "保存为ASCII码形式"; SaveFile.Filter = "文本文件|*.txt"; SaveFile.ShowDialog(); } private void TXB_Receive_TextChanged(object sender, EventArgs e) { //TXB_Receive.Focus(); //Application.DoEvents(); TXB_Receive.ScrollToCaret(); } private void BTN_AddMemo_Click(object sender, EventArgs e) { if (TXB_Memo.Text != "") this.Text = "串口数据分析工具 By 飞无痕,PLAIEU --正与" TXB_Memo.Text "连接"; else this.Text = "串口数据分析工具 By 飞无痕,PLAIEU"; } private void TXB_Memo_KeyPress(object sender, KeyPressEventArgs e) { if(e.KeyChar=='\r') { if (TXB_Memo.Text != "") this.Text = "串口数据分析工具 By 飞无痕,PLAIEU --正与" TXB_Memo.Text "连接"; else this.Text = "串口数据分析工具 By 飞无痕,PLAIEU"; TXB_Send.Focus(); } } } }
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论