实例介绍
【实例简介】
SOCKET调试工具与压力测试小工具源代码
【实例截图】
【核心代码】
public void SendThreadProc() { IsUdp.Enabled = IsTcp.Enabled = IsHttp.Enabled = Server.Enabled = Port.Enabled = false; IPHostEntry ipEntry = Dns.GetHostEntry(Server.Text); statusBar.Panels[0].Text = "正在解析主机\"" Server.Text "\"……"; int RecvCount = 0; int MSDiff; DateTime stTime = DateTime.Now, enTime; if (ipEntry == null) { MessageBox.Show(this, "无法解析主机地址:\"" Server.Text "\""); IsUdp.Enabled = IsTcp.Enabled = IsHttp.Enabled = Server.Enabled = Port.Enabled = true; return; } IPAddress ipAddress = ipEntry.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Int32.Parse(Port.Text)); byte[] msg = GetEncoding().GetBytes(Send.Text); btnSend.Enabled = false; ContinueRecving = true; //创建Socket: Socket sok; if (IsUdp.Checked) { sok = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); } else { sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } try { //连接发送 if (IsUdp.Checked) { statusBar.Panels[0].Text = "正在发送UDP到\"" Server.Text "\"……"; sok.SendTo(msg, ipEndPoint); } else { statusBar.Panels[0].Text = "正在连接\"" Server.Text "\"……"; sok.Connect(ipEndPoint); sok.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, SocketTimeOut * 1000); sok.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, SocketTimeOut * 1000); statusBar.Panels[0].Text = "正在发送请求到 \"" Server.Text "\"……"; sok.Send(msg, 0, msg.Length, SocketFlags.None); } if (IsHttp.Checked) { // Blocks until read returns. byte[] buf = new byte[1024]; int rc; CurrentThreadAge = 0; timer1.Enabled = true; statusBar.Panels[0].Text = "正在接收来自 \"" Server.Text "\"……"; while (ContinueRecving) { rc = sok.Receive(buf, 0, buf.Length, SocketFlags.None); if (rc > 0) { AppendSendRecv(GetEncoding().GetString(buf, 0, rc)); RecvCount = rc; } else break; } } } catch (Exception e) { AppendSendRecv("\r\n----" e.Message "\r\n"); } //关闭连接 if (sok.Connected) { sok.Shutdown(SocketShutdown.Both); } sok.Close(); enTime = DateTime.Now; MSDiff = (int)((enTime - stTime).TotalMilliseconds); timer1.Enabled = false; statusBar.Panels[0].Text = "完毕, 接收到" RecvCount "字节,下载速率 " ((int)(1000.0 / (MSDiff > 0 ? MSDiff : 1) * RecvCount)) " 字节/秒。"; btnSend.Enabled = true; IsUdp.Enabled = IsTcp.Enabled = IsHttp.Enabled = Server.Enabled = Port.Enabled = true; } public void BatchSendThreadProc() { IPHostEntry ipEntry = Dns.GetHostEntry(Server.Text); if (ipEntry == null) { return; } ThreadCounter ; try { //解析地址 IPAddress ipAddress = ipEntry.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Int32.Parse(Port.Text)); byte[] msg = GetEncoding().GetBytes(Send.Text); //无限循环 while(BatchContinueRecving) { //创建Socket: Socket sok; if (IsUdp.Checked) { sok = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); } else { sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } try { sok.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, SocketTimeOut*1000); sok.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, SocketTimeOut*1000); } catch { } //发送 || 连接 if (IsUdp.Checked) { sok.SendTo(msg, ipEndPoint); } else { try { sok.Connect(ipEndPoint); } catch { } sok.Send(msg, 0, msg.Length, SocketFlags.None); } if (IsHttp.Checked) { // Blocks until read returns. byte[] buf = new byte[1024]; int rc; while(BatchContinueRecving)// { rc = sok.Receive(buf, 0, buf.Length, SocketFlags.None); if (rc > 0) { //Result = GetEncoding().GetString(buf, 0, rc); } else break; } } //关闭本次连接 //Recv.Text = Result; sok.Shutdown(SocketShutdown.Both); sok.Close(); TotalResp ; RespPerSecond ; } } catch(Exception e) { AppendSendRecv("\r\n----" e.Message "\r\n"); } ThreadCounter--; } public void HttpWorkerThread(object args) { Socket s = (Socket)args; if (s != null && ContinueListening) { try { statusBar.Panels[0].Text = "正在接收来自“" ((IPEndPoint)s.RemoteEndPoint).Address.ToString() "”的TCP数据……"; } catch { } if (miAutoShowTime.Checked) AppendLestenRecv(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") " "); //设置超时: try { s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, SocketTimeOut * 1000); s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, SocketTimeOut * 1000); //开始接收TCP: byte[] buf = new byte[65536]; int rc, RecvLen = 0; string tmp; int clen = -1; while (ContinueListening) { if (IsHttpListen.Checked && clen > 0 && RecvLen >= clen) break;//超过Content-Length,退出循环 rc = s.Receive(buf, 0, buf.Length, SocketFlags.None); if (rc > 0) { if (IsHttpListen.Checked && clen == -1) { tmp = GetEncoding().GetString(buf, 0, rc); AppendLestenRecv(tmp); tmp = tmp.ToLower(); int st = tmp.IndexOf("content-length:"); if (st >= 0) { st = 15; tmp = tmp.Substring(st, tmp.Length - st); st = tmp.IndexOf("\r\n"); if (st >= 0) tmp = tmp.Substring(0, st).Trim(); else tmp = tmp.Trim(); try { clen = Int32.Parse(tmp); } catch//错误 { clen = rc; } } else { clen = rc;//没有Content-Length,就当完成接收 } } else AppendLestenRecv(GetEncoding().GetString(buf, 0, rc)); RecvLen = rc; } else break; } if (miAutoCRLF.Checked) AppendLestenRecv("\r\n"); byte[] msg = GetEncoding().GetBytes(ListenSend.Text); s.Send(msg, 0, msg.Length, SocketFlags.None); //关闭连接 s.Shutdown(SocketShutdown.Both); s.Close(); //开始新的侦听: statusBar.Panels[0].Text = "完毕";//阻塞 if (miAlert.Checked) Alert(); } catch (Exception e) { AppendLestenRecv(e.Message); } } } [DllImport("winmm.dll", EntryPoint="PlaySound", CharSet=CharSet.Auto)] public static extern bool PlaySound( string pszSound, int hmod, int fdwSound ); public void PlayWav(string FileName) { PlaySound(FileName, 0, 0x0001|0x00020000); } public void Alert() { PlayWav("notify.wav"); } public void ListenThreadProc() { IPHostEntry ipEntry = Dns.GetHostEntry(ListenAddr.Text); IsUdpListen.Enabled = IsTcpListen.Enabled = IsHttpListen.Enabled = ListenAddr.Enabled = ListenPort.Enabled = false; statusBar.Panels[0].Text = "正在解析主机\"" ListenAddr.Text "\"……"; if (ipEntry == null) { MessageBox.Show(this, "无法解析主机地址:\"" ListenAddr.Text "\""); IsUdpListen.Enabled = IsTcpListen.Enabled = IsHttpListen.Enabled = ListenAddr.Enabled = ListenPort.Enabled = true; return; } IPAddress ipAddress = ipEntry.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Int32.Parse(ListenPort.Text)); try { btnStartListen.Enabled = false; ContinueListening = true; //创建Socket: Socket sok; if (IsUdpListen.Checked) { sok = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); } else { sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } sok.Bind(ipEndPoint); if (!IsUdpListen.Checked)sok.Listen(100); //100: Listen Queue Size //接收 if (IsUdpListen.Checked) { EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); byte[] buf = new byte[655360]; int rc; while (ContinueListening) { statusBar.Panels[0].Text = "完毕"; rc = sok.ReceiveFrom(buf, ref remoteEP);//阻塞 string srcIP = ((IPEndPoint)remoteEP).Address.ToString(); statusBar.Panels[0].Text = "接收到来自“" srcIP "”的UDP数据"; if (miAutoShowTime.Checked)AppendLestenRecv(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") " [" srcIP "]\r\n"); do { //开始接收UDP: if (rc > 0) { AppendLestenRecv(GetEncoding().GetString(buf, 0, rc)); } if (sok.Available > 0) { //还有后续数据 rc = sok.ReceiveFrom(buf, ref remoteEP);//阻塞 } else break; } while (ContinueListening); if (miAutoCRLF.Checked)AppendLestenRecv("\r\n"); if (miAlert.Checked) Alert(); if (ContinueListening) // 当循环被通知退出时,为 false { byte[] msg = GetEncoding().GetBytes(ListenSend.Text); try { if (msg.Length > 0) sok.SendTo(msg, sok.RemoteEndPoint);//答复对方 } catch (Exception e) { AppendLestenRecv("\r\n----" e.Message "\r\n"); } } } } else { while (ContinueListening) { statusBar.Panels[0].Text = "完毕"; Socket s = sok.Accept();//阻塞 if (ContinueListening) // 当循环被通知退出时,为 false { ThreadPool.QueueUserWorkItem(new WaitCallback(HttpWorkerThread), s); } } } //关闭连接 if (sok.Connected) { sok.Shutdown(SocketShutdown.Both); } sok.Close(); } catch(Exception e) { AppendLestenRecv("\r\n----" e.Message "\r\n"); } statusBar.Panels[0].Text = "完毕"; btnStartListen.Enabled = true; IsUdpListen.Enabled = IsTcpListen.Enabled = IsHttpListen.Enabled = ListenAddr.Enabled = ListenPort.Enabled = true; } private void AppendSendRecv(string text) { try { Recv.AppendText(text); } catch { } } private void AppendLestenRecv(string text) { try { ListenRecv.AppendText(text); } catch { } } private void btnSend_Click(object sender, System.EventArgs e) { CurrentRecvThread = new Thread(new ThreadStart(SendThreadProc)); CurrentRecvThread.IsBackground = true; CurrentRecvThread.Start(); statusBar.Panels[5].Text = "0"; } private void btnStop_Click(object sender, System.EventArgs e) { } private void Form1_Load(object sender, System.EventArgs e) { RebuildHostStr(); } private void groupBox1_Enter(object sender, System.EventArgs e) { } private void groupBox1_Enter_1(object sender, System.EventArgs e) { } private void Send_TextChanged(object sender, System.EventArgs e) { } private void statusBar1_PanelClick(object sender, System.Windows.Forms.StatusBarPanelClickEventArgs e) { } private void Form1_Resize(object sender, System.EventArgs e) { } private void Form1_SizeChanged(object sender, System.EventArgs e) { } private void splitter1_SplitterMoving(object sender, System.Windows.Forms.SplitterEventArgs e) { } private void Send_SizeChanged(object sender, System.EventArgs e) { if (this.WindowState == FormWindowState.Minimized)return; if (Send.Height < splitter1.MinSize) { int delta = Send.Top splitter1.MinSize - splitter1.Top; Send.Height = delta; splitter1.Top = delta; Recv.Top = delta; Recv.Height -= delta; } } private void btnStop_Click_1(object sender, System.EventArgs e) { if (CurrentRecvThread != null) { ContinueRecving = false; } } private void btnClear_Click(object sender, System.EventArgs e) { Recv.Clear(); } private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { statusBar.Panels[1].Text = ThreadCounter.ToString(); statusBar.Panels[2].Text = TotalResp.ToString(); statusBar.Panels[3].Text = RespPerSecond.ToString(); RespPerSecond = 0; } private void StatusBar_PanelClick(object sender, System.Windows.Forms.StatusBarPanelClickEventArgs e) { } private void menuItem11_Click(object sender, System.EventArgs e) { Close(); } private void menuItem4_Click(object sender, System.EventArgs e) { Process proc = new Process(); proc.StartInfo.FileName = Application.ExecutablePath; proc.Start(); } private void menuItem7_Click(object sender, System.EventArgs e) { ThreadCounter = 0; TotalResp = 0; RespPerSecond = 0; } private void menuItem8_Click(object sender, System.EventArgs e) { BatchContinueRecving = true; Thread th = new Thread(new ThreadStart(BatchSendThreadProc)); th.IsBackground = true; th.Start(); } private bool AppGetInputInt(string msg, ref int reti) { string rets = reti.ToString(); bool result = InputForm.ShowModal(this, msg, ref rets); if (result) { try { reti = Int32.Parse(rets); } catch { MessageBox.Show(this, "错误:输入无效", "错误消息", MessageBoxButtons.OK, MessageBoxIcon.Error); result = false; } } return result; } private void menuItem9_Click(object sender, System.EventArgs e) { int i=0; int c = 10; if (AppGetInputInt("请输入要启动的线程数目:", ref c)) { if (c < 1) { MessageBox.Show(this, "请输入有效数字"); return; } //启动线程 BatchContinueRecving = true; while(i < c) { Thread th = new Thread(new ThreadStart(BatchSendThreadProc)); th.IsBackground = true; th.Start(); } } } private void menuItem6_Click(object sender, System.EventArgs e) { int c = SocketTimeOut; if (AppGetInputInt("请输入超时秒数:", ref c)) { if (c < 1) { MessageBox.Show(this, "请输入有效数字"); return; } SocketTimeOut = c; } } private void menuItem12_Click(object sender, System.EventArgs e) { BatchContinueRecving = false; } private void Recv_TextChanged(object sender, System.EventArgs e) { ShowCaretPos(sender as TextBox); } private void FormMain_Closing(object sender, System.ComponentModel.CancelEventArgs e) { BatchContinueRecving = ContinueRecving = ContinueListening = false; NotifyStopListen(); } private void menuItem3_Click(object sender, System.EventArgs e) { MessageBox.Show(this, "Socket调试程序, V3.0\t\t\t\t\t\r\nAppFramework 2008-02-25\r\nAppFramework@hotmail.com\r\n\r\n现在时刻:" DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } private void ListenAddr_TextChanged(object sender, System.EventArgs e) { } private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e) { } private void RebuildHostStr() { ComboBox box = Server; string HostStr = "Host: " box.Text ":" Port.Text; //计算切分位置和对应插入的Host头字符串: string s = Send.Text.ToLower(); //先找Host头: int st=-1, en=s.Length; while(s != "") { st = s.LastIndexOf("host:"); if ((st==0) || (st>0 && "\r\n".IndexOf(s[st-1])>=0))//确保找到的是"host:",而不是"localhost:"之类 { s = Send.Text.ToLower(); string rStr = s.Substring(st, s.Length-st); en = rStr.IndexOf("\r\n"); if (en >= 0) { en = st; } else { en = st rStr.Length; } break; } else { s = s.Substring(0, st); st = -1; } } s = Send.Text.ToLower(); if (st >= 0)//找到了Host头 { } else { //找最后一个\r\n\r\n: st = s.LastIndexOf("\r\n\r\n"); if (st>=0 && st 4==s.Length) { en = st; HostStr = "\r\n" HostStr; } else { //找最后一个\r\n: st = s.LastIndexOf("\r\n"); if (st>=0 && st 2==s.Length) { en = st; HostStr = "\r\n" HostStr "\r\n"; } else//在最后追加: { st = en = s.Length; HostStr = "\r\n" HostStr "\r\n\r\n"; } } } //重新组合字符串: s = Send.Text; Send.Text = s.Substring(0, st) HostStr s.Substring(en, s.Length - en); } private void Server_SelectedIndexChanged(object sender, System.EventArgs e) { RebuildHostStr(); } private void NotifyStopListen() { //向自己发送TCP/UDP请求,解决侦听线程的阻塞造成的无法退出: IPHostEntry ipEntry = Dns.GetHostEntry(ListenAddr.Text); statusBar.Panels[0].Text = "正在解析主机\"" ListenAddr.Text "\"……"; if (ipEntry == null) { statusBar.Panels[0].Text = "无法解析主机地址:\"" ListenAddr.Text "\""; return; } IPAddress ipAddress = ipEntry.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Int32.Parse(ListenPort.Text)); //创建Socket: Socket sokUdp, sokTcp; sokUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); sokTcp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //连接发送 statusBar.Panels[0].Text = "正在通知UDP侦听线程退出……"; try { if (btnStartListen.Enabled==false && IsUdpListen.Checked) { sokUdp.SendTo(GetEncoding().GetBytes("QUIT"), ipEndPoint); } } catch { } statusBar.Panels[0].Text = "正在通知TCP侦听线程退出……"; try { if (btnStartListen.Enabled==false && !IsUdpListen.Checked) { sokTcp.Connect(ipEndPoint); byte[] buf = GetEncoding().GetBytes("QUIT"); sokTcp.Send(buf, 0, buf.Length, SocketFlags.None); } } catch { } //关闭连接 try { if (sokUdp.Connected) { sokUdp.Shutdown(SocketShutdown.Both); } sokUdp.Close(); if (sokTcp.Connected) { sokTcp.Shutdown(SocketShutdown.Both); } sokTcp.Close(); } catch { } statusBar.Panels[0].Text = "完毕"; } private void btnStopListen_Click(object sender, System.EventArgs e) { ContinueListening = false; NotifyStopListen(); } private void btnStartListen_Click(object sender, System.EventArgs e) { Thread th = new Thread(new ThreadStart(ListenThreadProc)); th.IsBackground = true; th.Start(); } private void ShowCaretPos(TextBox Sender) { if (!Sender.Focused)return; int row=0, col=0; Utils.MemoGetCaretPos(Sender, ref row, ref col); statusBar.Panels[4].Text = row ":" col; } private void Send_TextChanged_1(object sender, System.EventArgs e) { ShowCaretPos(sender as TextBox); } private void Send_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { ShowCaretPos(sender as TextBox); } private void Send_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { ShowCaretPos(sender as TextBox); } private void timer1_Elapsed_1(object sender, System.Timers.ElapsedEventArgs e) { statusBar.Panels[5].Text = ( CurrentThreadAge).ToString(); } private void Server_TextChanged(object sender, System.EventArgs e) { RebuildHostStr(); } private void Port_TextChanged(object sender, System.EventArgs e) { RebuildHostStr(); } private void Recv_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { ShowCaretPos(sender as TextBox); } private void Recv_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { ShowCaretPos(sender as TextBox); } private void btnClearListen_Click(object sender, System.EventArgs e) { ListenRecv.Text = ""; } private void menuItem15_Click(object sender, System.EventArgs e) { if (this.ActiveControl is TextBox) { TextBox box = this.ActiveControl as TextBox; byte[] b = GetEncoding().GetBytes(box.SelectedText); MessageBox.Show("共 " b.Length.ToString() " 字节"); } } private void ListenSend_TextChanged(object sender, System.EventArgs e) { ShowCaretPos(sender as TextBox); } private void ListenSend_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { ShowCaretPos(sender as TextBox); } private void ListenSend_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { ShowCaretPos(sender as TextBox); } private void ListenRecv_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { ShowCaretPos(sender as TextBox); } private void ListenRecv_TextChanged(object sender, System.EventArgs e) { ShowCaretPos(sender as TextBox); } private void ListenRecv_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { ShowCaretPos(sender as TextBox); } private void ListenSend_SizeChanged(object sender, System.EventArgs e) { if (this.WindowState == FormWindowState.Minimized)return; if (ListenSend.Height < splitter2.MinSize) { int delta = Send.Top splitter2.MinSize - splitter2.Top; ListenSend.Height = delta; splitter2.Top = delta; ListenRecv.Top = delta; ListenRecv.Height -= delta; } } private void ListenSend_DoubleClick(object sender, System.EventArgs e) { ListenSend.SelectAll(); } private void miAutoCRLF_Click(object sender, System.EventArgs e) { MenuItem item = (MenuItem)sender; item.Checked = !item.Checked; } private void Send_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (e.Control && e.KeyCode==Keys.A) { TextBox box = sender as TextBox; box.SelectAll(); } } bool CountStarted = false; DateTime StartTime; int RespCountWhenCountStarted; private void menuItem19_Click(object sender, System.EventArgs e) { if (CountStarted) { if (MessageBox.Show(this, "计数已经开始,你想要停止当前的计数吗?", "询问", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes) return; } StartTime = DateTime.Now; RespCountWhenCountStarted = TotalResp; CountStarted = true; miStartCount.Enabled = false; miStopCount.Enabled = true; } private void menuItem20_Click(object sender, System.EventArgs e) { if (CountStarted) { CountStarted = false; miStartCount.Enabled = true; miStopCount.Enabled = false; int AllResp = TotalResp - RespCountWhenCountStarted; int RespPerSec = (int)((AllResp*10000000.0)/(float)(DateTime.Now.Ticks-StartTime.Ticks)); MessageBox.Show("响应速度约为 " RespPerSec.ToString() " RPS."); } else { MessageBox.Show("计数尚未开始,请先启动计数器!"); } } private void miUTF8_Click(object sender, System.EventArgs e) { miUTF8.Checked = !miUTF8.Checked; } private Encoding GetEncoding() { return miUTF8.Checked ? Encoding.UTF8 : Encoding.Default; } private void miAlert_Click(object sender, System.EventArgs e) { miAlert.Checked = !miAlert.Checked; }
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)