} // recCallBack /// <summary> /// 回调函数发:送数据 /// </summary> /// <param name="ar">the ar</param> public static void sendCallBack(IAsyncResult ar) { // 当前用户实例 User currentUser = User.GetInstance(); SendCallBackParam sendCallBackParam = (SendCallBackParam)ar.AsyncState; ListBox lstBox_recMsg = sendCallBackParam.lstBox_recMsg; string strSend = sendCallBackParam.strSend; DelegateMem.AppendDelegate appendString = sendCallBackParam.appendString; try { //异步通信 结束数据的异步发送 currentUser.socket.EndSend(ar); strSend = "发:" + strSend; // 在右侧显示 string showStr = strSend.PadLeft(lstBox_recMsg.Width / 10, ' '); lstBox_recMsg.Invoke(appendString, lstBox_recMsg, showStr); } // try catch (System.Exception ex) { SocketHandler.ShutDownConn(currentUser.socket); lstBox_recMsg.Invoke(appendString, lstBox_recMsg, "服务器断开了TCP连接"); } // catch } // sendCallBack
} // recvCallBack /// <summary> /// 发送数据 /// </summary> /// <param name="frd"></param> /// <param name="strData"></param> private static void sendData(MyFriend frd, string strData) { // 获取在线用户列表的实例 Friends friends = Friends.GetInstance(); try { byte[] msg = Encoding.UTF8.GetBytes(strData); //初始化相关参数 SendCallBackParam sendCallBackParam = new SendCallBackParam(frd); //异步调用 AsyncCallback callBack = new AsyncCallback(CallBackFunc.sendCallBack); frd.socket.BeginSend(msg, 0, msg.Length, SocketFlags.None, callBack, sendCallBackParam); } // try catch (System.Exception ex) { lock (friends) { friends.friendList.Remove(frd); } frd.Dispose(); } // catch } // sendData
} // btn_sendMsg_Click /// <summary> /// 群聊通信 /// </summary> private void sendData() { User currentUser = User.GetInstance(); try { string finalStr = BuildMsg.buildSendMsg("group", userName, currentUser.socket.LocalEndPoint.ToString(), destName, str_Send); byte[] msg = Encoding.UTF8.GetBytes(finalStr); //始化需要传入的参数 SendCallBackParam sendCallBackParam = new SendCallBackParam( str_Send, lstBox_recMsg, appendString); // 定制并实例化回调方法 AsyncCallback callBack = new AsyncCallback(CallBackFunc.sendCallBack); // 开始异步发送数据 currentUser.socket.BeginSend(msg, 0, msg.Length, SocketFlags.None, callBack, sendCallBackParam); } // try catch (System.Exception ex) { SocketHandler.ShutDownConn(currentUser.socket); lstBox_recMsg.Invoke(appendString, lstBox_recMsg, "服务器断开了TCP连接"); } // catch } // sendData
} // sendData /// <summary> /// 发送消息 /// </summary> /// <param name="ar"></param> public static void sendCallBack(IAsyncResult ar) { // 初始化关键参数 Friends friends = Friends.GetInstance(); SendCallBackParam sendCallBackParam = (SendCallBackParam)ar.AsyncState; MyFriend frd = sendCallBackParam.frd; try { frd.socket.EndSend(ar); } // try catch (System.Exception ex) { lock (friends) { friends.friendList.Remove(frd); } frd.Dispose(); } // catch } // sendCallBac