/// <summary> /// 循环运行,监听广播消息,接收到了就保存起来,同时返回自己的消息 /// </summary> private void run() { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, port); sock.Bind(iep); EndPoint ep = (EndPoint)iep; log.Info("Broadcast Ready to receive…"); while (flag) { try { byte[] data = new byte[1024]; int recv = sock.ReceiveFrom(data, ref ep); string stringData = Encoding.UTF8.GetString(data, 0, recv); BroadInfo phone = JsonConvert.DeserializeObject <BroadInfo>(stringData); foreach (BroadParam bp in phone.param) { if (bp.launch_time_id == null) { continue; } //log.InfoFormat("received: {0} from: {1}", stringData, ep.ToString()); Socket phoneSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); phoneSocket.Connect(new IPEndPoint(IPAddress.Parse(bp.ip), bp.port)); BroadParam pp = new BroadParam(); pp.name = Environment.MachineName; pp.ip = GetInternalIP(); pp.mac = MyInfo.myMAC; pp.port = ConfigResource.MYSERVER_PORT; pp.launch_time_id = MyInfo.launch_time_id; List <BroadParam> param = new List <BroadParam>(); param.Add(pp); BroadInfo info = new BroadInfo(param, "PC_Y", "default"); phoneSocket.Send(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(info))); //log.Info("返回手机信息: " + JsonConvert.SerializeObject(info)); phoneSocket.Close(); int len = MyInfo.phone.Count; if (len >= 50) { MyInfo.phone.Clear(); continue; } MyInfo.phone.Add(bp); } } catch (SocketException e) { log.Error("广播错误", e); } } }
//处理手机发送过的tv信息,保存起来. public void FuncMSG(string msg) { BroadInfo phone = JsonConvert.DeserializeObject <BroadInfo>(msg); foreach (BroadParam b in phone.param) { if (!MyInfo.tvs.Contains(b)) { MyInfo.tvs.Add(b); } info.tv.TVInfo tv = new info.tv.TVInfo(b.launch_time_id, b.name, b.launch_time_id, b.ip, false, false, false); tv.timeStamp = tv.timeStamp = function.tv.TVFunction.ConvertDateTimeInt(DateTime.Now); if (!MyInfo.tvLibrary.value.Contains(tv)) { MyInfo.tvLibrary.value.Add(tv); } } }