private static void TransferTcp_Ip(IAsyncResult ar) { RelationTcp_Ip relation = (RelationTcp_Ip)ar.AsyncState; if (relation.readTcp.Connected) { int length = 0; EasyOp.Do(() => { length = relation.readTcp.GetStream().EndRead(ar); }, () => { EasyOp.Do(() => { LogUtils.Trace($"接收到数据 From:{relation.readTcp.RemoteEndPoint} length:{length}"); }); if (length > 0) { if (relation.writeTcp.Connected) { EasyOp.Do(() => { relation.writeTcp.GetStream().Write(relation.buffer.Take(length).ToArray(), 0, length); }, () => { EasyOp.Do(() => { StartTransferTcp_Ip(relation); }, ex => { LogUtils.Debug($"Tcp连接已被断开,读取next数据包失败 {relation.readTcp.RemoteEndPoint}"); relation.writeTcp?.SafeClose(); }); }, ex => { LogUtils.Debug($"Tcp连接已被断开,发送数据包失败 {relation.writeTcp.RemoteEndPoint}"); relation.readTcp?.SafeClose(); }); } } else { LogUtils.Debug($"Tcp连接已被断开,接收tcp断开信号 {relation.readTcp.RemoteEndPoint}"); relation.writeTcp?.SafeClose(); } }, ex => { LogUtils.Debug($"数据包读取发生异常 {relation.readTcp.RemoteEndPoint} {ex}"); relation.writeTcp?.SafeClose(); }); } else { LogUtils.Debug($"Tcp连接已被断开 {relation.readTcp.RemoteEndPoint}"); relation.writeTcp?.SafeClose(); } //TcpCenter.Instance.ConnectedTcpList.Remove(relation.readTcp); //TcpCenter.Instance.ConnectedTcpList.Remove(relation.writeTcp); }
public static bool BindTcp(P2PTcpClient readTcp, P2PTcpClient toTcp) { //TcpCenter.Instance.ConnectedTcpList.Add(readTcp); //TcpCenter.Instance.ConnectedTcpList.Add(toTcp); bool ret = true; RelationTcp_Ip toRelation = new RelationTcp_Ip(); EasyOp.Do(() => { toRelation.readTcp = readTcp; toRelation.readSs = readTcp.GetStream(); toRelation.writeTcp = toTcp; toRelation.writeSs = toTcp.GetStream(); toRelation.buffer = new byte[P2PGlobal.P2PSocketBufferSize]; StartTransferTcp_Ip(toRelation); }, () => { EasyOp.Do(() => { RelationTcp_Ip fromRelation = new RelationTcp_Ip(); fromRelation.readTcp = toRelation.writeTcp; fromRelation.readSs = toRelation.writeSs; fromRelation.writeTcp = toRelation.readTcp; fromRelation.writeSs = toRelation.readSs; fromRelation.buffer = new byte[P2PGlobal.P2PSocketBufferSize]; StartTransferTcp_Ip(fromRelation); }, ex => { LogUtils.Debug($"绑定Tcp失败:{Environment.NewLine}{ex}"); EasyOp.Do(readTcp.SafeClose); ret = false; }); }, ex => { LogUtils.Debug($"绑定Tcp失败:{Environment.NewLine}{ex}"); EasyOp.Do(readTcp.SafeClose); EasyOp.Do(toTcp.SafeClose); ret = false; }); return(ret); }
private static void StartTransferTcp_Ip(RelationTcp_Ip tcp) { tcp.readTcp.GetStream().BeginRead(tcp.buffer, 0, tcp.buffer.Length, TransferTcp_Ip, tcp); }