public static void Send(NetData data, NetType t = NetType.TCP) { if (info != null) { switch (t) { case NetType.TCP: info.Send(data.ToBuffer()); break; case NetType.UDP: NetUdp.Send(data.ToBuffer(), info.ip); break; } } else { Debug.LogWarning("未连接tcp服务器"); } }
public static void SendTo(NetData data, IPEndPoint ip, NetType t = NetType.TCP) { if (clients.ContainsKey(ip)) { switch (t) { case NetType.TCP: clients[ip].Send(data.ToBuffer()); break; case NetType.UDP: NetUdp.Send(data.ToBuffer(), ip); break; } } else { Debug.LogError(ip + "未与本机建立连接"); } }
//public static void Send(NetData data, NetType t = NetType.TCP) //{ // if (socket != null) // { // byte[] b = data.ToBuffer(); // if (LogEnable) // Debug.Log("发送数据:" + b.Length); // { // switch (t) // { // case NetType.TCP: // foreach (var c in clients.Values) // c.Send(b); // break; // case NetType.UDP: // foreach (var c in clients) // NetUdp.Send(b, c.Key); // break; // } // } // } // else // { // Debug.LogError("未开启tcp服务器"); // } //} public static void Send(NetData data, NetType t = NetType.TCP, IPEndPoint ignore = null) { if (socket != null) { byte[] b = data.ToBuffer(); if (LogEnable) { Debug.Log("发送数据:" + b.Length); } { switch (t) { case NetType.TCP: foreach (var c in clients) { if (ignore == null || c.Key.ToString() != ignore.ToString()) { c.Value.Send(b); } } break; case NetType.UDP: foreach (var c in clients) { if (ignore == null || c.Key.ToString() != ignore.ToString()) { NetUdp.Send(b, c.Key); } } break; } } } else { Debug.LogError("未开启tcp服务器"); } }
public void Receive() { Thread r = new Thread(() => { try { byte[] d = new byte[4096]; tcp.ReceiveTimeout = Net.Timeout; int l = tcp.Receive(d); while (l > 0) { if (LogEnable) { Debug.Log("收到" + ip + ",tcp数据长度:" + l); } if (l < d.Length) { byte[] _d = new byte[l]; Array.Copy(d, 0, _d, 0, l); buffer.Write(_d); } else { buffer.Write(d); } if (buffer.IsRead) { NetData n = NetData.ReadBuffer(buffer.Read()); n.RemoteIP = ip; Net.NetDatas.Add(n); } l = tcp.Receive(d); } } catch (Exception e) { Debug.LogError("tcpInfo:" + ip + ":" + e.Message.ToString()); } finally { if (LogEnable) { Debug.Log("tcp接收监听关闭"); } Close(); } }); r.Start(); //心跳包线程 Thread h = new Thread(() => { while (true) { Thread.Sleep(Timeout / 2); if (tcp != null) { NetData n = new NetData(NetMessageType.Heartbeat); n.Write(DateTime.Now.Millisecond); Send(n.ToBuffer()); } else { return; } } }); h.Start(); }
public static void Send(NetData data, IPEndPoint ip) { Send(data.ToBuffer(), ip); }