/// <summary> /// 发起方: /// 成功建立Socket连接,准备发送1次确认 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void createSocketCompletedEventHandler( object sender, EventArgs ea) { // 取得新建的Socket(如果连接成功) // 此Socket应等于this.socket SocketAsyncEventArgs socketAsyncEA = (SocketAsyncEventArgs)ea; Socket createdSocket = socketAsyncEA.ConnectSocket; if (createdSocket != null && createdSocket == socket) // 连接成功 { // 1次确认,发送name=自己(发起方)用户名 ProtocalHandler protocalHandler = new ProtocalHandler(main.MyName); string protocalText = protocalHandler.Pack("init_gp_request"); // 发送群中所有好友 foreach (string friend in owner.friends) { string friendBase64 = protocalHandler.StringToBase64string(friend); protocalText = protocalHandler.Append( protocalText, "target", friendBase64); } byte[] sendbuf = Encoding.ASCII.GetBytes(protocalText); SocketAsyncEventArgs saEA = new SocketAsyncEventArgs(); saEA.Completed += new EventHandler <SocketAsyncEventArgs>( createdSocketSendNamesCompletedEventHandler); saEA.SetBuffer(sendbuf, 0, sendbuf.Length); socket.SendAsync(saEA); } }
/// <summary> /// 发送RTF文本 /// </summary> /// <param name="rtfToSend"></param> public void SendRtfText(string rtfToSend) { try { ProtocalHandler protocalHandler = new ProtocalHandler(main.MyName); string protocalText = protocalHandler.Pack( "chat_rtf", protocalHandler.StringToBase64string(rtfToSend)); byte[] sendbuf = Encoding.ASCII.GetBytes(protocalText); SocketAsyncEventArgs saEA = new SocketAsyncEventArgs(); saEA.Completed += new EventHandler <SocketAsyncEventArgs>( SendCompletedDoNothing); saEA.SetBuffer(sendbuf, 0, sendbuf.Length); socket.SendAsync(saEA); } catch (Exception ex) { Trace.WriteLine("异常位置:SendRtfText"); Trace.WriteLine(ex.Message); } }
/// <summary> /// 发起方: /// 申请发送文件 /// </summary> /// <param name="fileName">文件名(含路径)</param> public void RequestToSendFile(string fileName) { // 打开文件 filePacker = new FilePacker(owner.fileName); maxSeq = filePacker.GetPackNumbers(); owner.BeginInvoke(owner.setProgressDelegate, (int)maxSeq); // 取得文件名,并将文件名编码以便使用 safeFileNameBase64 = owner.GetSafeFileName(fileName); ProtocalHandler protocalHandler = new ProtocalHandler(owner.targetName); safeFileNameBase64 = protocalHandler.StringToBase64string(safeFileNameBase64); // 封装协议文本 string protocalText = protocalHandler.Pack("file_requesttosend"); protocalText = protocalHandler.Append(protocalText, "file", safeFileNameBase64); protocalText = protocalHandler.Append(protocalText, "maxseq", maxSeq.ToString()); try { // 发送 byte[] sendbuf = Encoding.ASCII.GetBytes(protocalText); SocketAsyncEventArgs saEA = new SocketAsyncEventArgs(); saEA.Completed += new EventHandler <SocketAsyncEventArgs>( SendCompletedDoNothing); saEA.SetBuffer(sendbuf, 0, sendbuf.Length); socket.SendAsync(saEA); } catch (Exception ex) { Trace.WriteLine("异常位置:RequestToSendFile"); Trace.WriteLine(ex.Message); } }