private void AsyncSend(IAsyncResult ar) { TransClient transClient = (TransClient)ar.AsyncState; try { int bytesRead = transClient.BeginClient.Client.EndReceive(ar); if (bytesRead > 0) { transClient.RemoteClient.Client.Send(send_buf, bytesRead, SocketFlags.None); // transSocket.RemoteSocket.BeginSend(send_buf, 0, bytesRead, SocketFlags.None, new AsyncCallback(asyncSendData), transSocket.RemoteSocket); this.SendBytes += bytesRead; } transClient.BeginClient.Client.BeginReceive(send_buf, 0, 4096, SocketFlags.None, new AsyncCallback(AsyncSend), transClient); } catch (Exception ee) { Zhangqi.LogHelpMe.WriteLog(ee.Message + ee.StackTrace, LogHelpMe.LogEnum.错误); } }
private void on_local_connected(IAsyncResult ar) { TcpClient beginClient; try { beginClient = serverListener.EndAcceptTcpClient(ar); } catch (Exception ee) { Zhangqi.LogHelpMe.WriteLog(ee.Message + ee.StackTrace, LogHelpMe.LogEnum.错误); return; } serverListener.BeginAcceptTcpClient(on_local_connected, serverListener); FrmMapper.IsClear = false; if (tcpClientList.Count > 0) { if (tcpClientList.Count >= this.MaxNum) { string message = (string.Format("客户端'{0}'无法连接,{1} 总连接数目超限", beginClient.Client.RemoteEndPoint.ToString(), this.Name)); LogHelpMe.WriteLog(message, LogHelpMe.LogEnum.警告); FrmMapper.IsClear = true; return; } if (SingleDic.ContainsKey(beginClient.Client.RemoteEndPoint.ToIP())) { if (SingleDic != null && SingleDic[beginClient.Client.RemoteEndPoint.ToIP()].Count >= this.SingleNum) { string message = (string.Format("客户端'{0}'无法连接,{1} 单连接数目超限", beginClient.Client.RemoteEndPoint.ToString(), this.Name)); LogHelpMe.WriteLog(message, LogHelpMe.LogEnum.警告); FrmMapper.IsClear = true; return; } } } tcpClientList.Add(beginClient); if (SingleDic == null) { return; } LogHelpMe.WriteLog(string.Format("客户端'{0}'连接进来,{1} 该IP单连接数目为 {2}", beginClient.Client.RemoteEndPoint.ToString(), Name, SingleDic[beginClient.Client.RemoteEndPoint.ToIP()].Count), LogHelpMe.LogEnum.提示); // 连接到转发的Socket TcpClient remoteClient = new TcpClient(); try { TransClient transClient = new TransClient() { RemoteClient = remoteClient, BeginClient = beginClient }; remoteClient.Connect(IPAddress.Parse(this.Point_out_host), this.Point_out_port); beginClient.Client.BeginReceive(send_buf, 0, 4096, SocketFlags.None, new AsyncCallback(AsyncSend), transClient); remoteClient.Client.BeginReceive(recieve_buf, 0, 4096, SocketFlags.None, new AsyncCallback(AsyncRecieve), transClient); FrmMapper.IsClear = true; } catch { LogHelpMe.WriteLog(string.Format("{0} 转发端口失败,监听服务器没有开启", Name), LogHelpMe.LogEnum.错误); tcpClientList.Remove(beginClient); } }