/// <summary> /// /// </summary> /// <param name="message"></param> /// <param name="ip"></param> /// <param name="port"></param> public DataArrivalEventArgs( Msg message, System.Net.IPAddress ip, int port) { this.msg = message; this.IP = ip; this.Port = port; }
/// <summary> /// /// </summary> /// <param name="message"></param> public DataArrivalEventArgs( Msg message) { this.msg = message; }
/// <summary> /// /// </summary> /// <param name="message"></param> /// <param name="ip"></param> /// <param name="port"></param> /// <param name="netClass"></param> /// <param name="Sock"></param> public DataArrivalEventArgs( Msg message, System.Net.IPAddress ip, int port,NatClass netClass,object Sock) { this.msg = message; this.IP = ip; this.Port = port; this.NetClass = netClass; this.SockObj = Sock; }
/// <summary> /// 发送或接收图片文件 /// </summary> /// <param name="IsSend">true是发送者,false是接收者</param> /// <param name="fullFileName">要发送的文件的绝对路径,如果接收则传空字符串</param> /// <param name="FileName">文件名</param> /// <param name="FileLen">文件的长度</param> /// <param name="fileExtension">文件扩展名</param> /// <param name="FileMD5Value">文件的MD5值</param> public void ImageTransfers(bool IsSend, string fullFileName, string FileName, int FileLen, string fileExtension, string FileMD5Value) { if (this.imageP2Ps.find(FileMD5Value) == null)//如果图片不在传输队列,则创建新文件传输组件进行传输 { CSS.IM.Library.Controls.p2pFileTransmitEX imageTransmit = new CSS.IM.Library.Controls.p2pFileTransmitEX(); this.imageP2Ps.add(imageTransmit);//添加文件传输组件到传输队列 imageTransmit.fileTransmitGetUDPPort += new CSS.IM.Library.Controls.p2pFileTransmitEX.GetUDPPortEventHandler(imageTransmit_fileTransmitGetUDPPort); imageTransmit.fileTransmitted += new CSS.IM.Library.Controls.p2pFileTransmitEX.fileTransmittedEventHandler(imageTransmit_fileTransmitted);//图片传输结束 imageTransmit.fileTransmitOutTime += new p2pFileTransmitEX.fileTransmitOutTimeEventHandler(imageTransmit_fileTransmitOutTime); //imageTransmit.fileTransmitConnected += new p2pFileTransmit.ConnectedEventHandler(imageTransmit_fileTransmitConnected); //imageTransmit.fileTransmitCancel += new p2pFileTransmit.fileTransmitCancelEventHandler(imageTransmit_fileTransmitCancel);//图片传输取消或异常中断 //imageTransmit.getFileProxyID += new p2pFileTransmit.getFileProxyIDEventHandler(imageTransmit_getFileProxyID); //imageTransmit.fileTransmitting += new p2pFileTransmit.fileTransmittingEventHandler(imageTransmit_fileTransmitting); if (IsSend) { string fileInfo = FileName + "|" + FileLen.ToString() + "|" + fileExtension + "|" + FileMD5Value;//初次请求发送文件时要先发送“控件参数”到对方,请求对方创建“文件发送控件”并建立连接 CSS.IM.Library.Class.Msg msg = new CSS.IM.Library.Class.Msg((byte)ProtocolClient.ImageTransmitRequest, TextEncoder.textToBytes(fileInfo)); this.LB_sockUDP.Send(RemotBaseUDPIP, RemotBaseUDPPort, msg.getBytes()); imageTransmit.ServerIp = RemotBaseUDPIP; } else { System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(Util.receiveImage); if (!dInfo.Exists) dInfo.Create(); imageTransmit.ServerIp = RemotBaseUDPIP; imageTransmit.startIncept(Util.receiveImage + FileMD5Value + fileExtension);//自动接收图片 } imageTransmit.SetParameter(IsSend, fullFileName, FileName, FileLen, fileExtension, FileMD5Value);//设置文件传输组件相关参数 } }
/// <summary> /// 接收到UDP数据功能 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LB_sockUDP_DataArrival(object sender, Library.Net.SockEventArgs e) { CSS.IM.Library.Class.Msg msg = new CSS.IM.Library.Class.Msg(e.Data); switch (msg.InfoClass) { case (byte)ProtocolClient.ImageTransmitRequest://图片文件发送请求 onUserImageSendRequest(new DataArrivalEventArgs(msg)); break; case (byte)ProtocolClient.ImageTransmitGetUDPPort://获取对方文件传输UDP本地端口 string[] IdInfo = TextEncoder.bytesToText(msg.Content).Split('|'); setImageTransmitGetUdpPort(IdInfo[0], IdInfo[1], IdInfo[2]); break; case (byte)ProtocolClient.FileTransmitRequest://文件发送请求 this.BeginInvoke(FileSendRequestEvent, new object[] { new DataArrivalEventArgs(msg) }); break; case (byte)ProtocolClient.FileTransmitGetUDPPort://获取对方文件传输UDP本地端口 //this.onUserFileTransmitGetUDPPort(new DataArrivalEventArgs(msg)); break; case (byte)CSS.IM.Library.Class.ProtocolClient.FileTransmitCancel://获得服务器返回的文件传输套接字广域网UDP端口 { ////Debug.WriteLine("取消文件传输"); ////Debug.WriteLine(TextEncoder.bytesToText(msg.Content)); ////filelistfrom.tabControl1.TabPages //for (int i = 0; i < filelistfrom.tabControl1.TabPages.Count; i++) //{ // TabPage tabpage = filelistfrom.tabControl1.TabPages[i] as TabPage; // CSS.IM.App.Controls.p2pFile p2pfile = tabpage.Controls[0] as CSS.IM.App.Controls.p2pFile; // if (TextEncoder.bytesToText(msg.Content) == p2pfile.Name) // { // p2pfile.CancelTransmit(true); // } //} } break; default: break; } }
/// <summary> /// 图片传输前的获取对方的端口 /// </summary> /// <param name="sender"></param> /// <param name="Port"></param> /// <param name="udpHandshakeInfoClass"></param> private void imageTransmit_fileTransmitGetUDPPort(object sender, int Port, bool udpHandshakeInfoClass) { CSS.IM.Library.Class.Msg msg = new CSS.IM.Library.Class.Msg((byte)ProtocolClient.ImageTransmitGetUDPPort); msg.Content = TextEncoder.textToBytes((sender as CSS.IM.Library.Controls.p2pFileTransmitEX).FileMD5Value + "|" + Port.ToString() + "|" + udpHandshakeInfoClass.ToString());//将获得的本地UDP端口号传输给对方 LB_sockUDP.Send(RemotBaseUDPIP, RemotBaseUDPPort, msg.getBytes()); }