예제 #1
0
 /// <summary>
 /// 序列化
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public static string Serializer(SocketInfo info)
 {
     return JsonConvert.SerializeObject(info);
 }
예제 #2
0
        private void Rec(SocketHelper.Sockets sks)
        {
            IPEndPoint _ip = new IPEndPoint(IPAddress.Any, 60000);
                if (sks.ex != null)
                {
                    //在此处理异常信息
                    WriteLog(string.Format("客户端出现异常:{0}.!", sks.ex.Message));
                    //ServerInfo _info = new ServerInfo() { Ip = sks.Ip };
                    ClientRemove(sks.Ip);
                    //labClientCount.Text = (cmbClient.Items.Count).ToString();

                }
                else
                {
                    if (sks.NewClientFlag)
                    {
                        WriteLog(string.Format("新客户端:{0}连接成功.!", sks.Ip));
                        //(sks.Ip.ToString());
                        //labClientCount.Text = (cmbClient.Items.Count).ToString();
                    }
                    else
                    {
                        byte[] buffer = new byte[sks.Offset];
                        Array.Copy(sks.RecBuffer, buffer, sks.Offset);
                        string str = string.Empty;
                        if (sks.Offset == 0)
                        {
                            str = sks.Ip.ToString()+" 客户端下线";
                            WriteLog(str);
                            ClientRemove(sks.Ip);
                            //labClientCount.Text = (cmbClient.Items.Count).ToString();
                        }
                        else
                        {
                            try
                            {
                                str = Encoding.UTF8.GetString(buffer);
                                SocketInfo _info = new SocketInfo();
                                _info = Derializer(str);
                                if (_info.Order==SocketOrder.Login)
                                {
                                    if (!CheckClientIsHaving(_info.ClientName,out _ip))
                                    {
                                        ClientAdd(new ServerInfo()
                                        {
                                            AimName = _info.AimName,
                                            ClientName = _info.ClientName,
                                            Ip = sks.Ip
                                        });
                                    }
                                    else
                                    {
                                        SendToClient(sks.Ip, "服务器存在相同名称客户端,请重命名.");
                                    }
                                    
                                }
                                else
                                {
                                    if (CheckClientIsHaving(_info.AimName, out _ip))
                                    {
                                        WriteLog(string.Format("{0}向{1}发送:{2}", _info.ClientName, _info.AimName, _info.DataInfo));
                                        SendToClient(_ip, _info.DataInfo);
                                    }
                                    else
                                    {
                                        WriteLog("没找到目标服务器,转发失败,已反馈到源服务器");
                                        SendToClient(sks.Ip, "发送失败,目标服务器可能已经离线..");
                                    }
                                    
                                    
                                }

                               
                            }
                            catch (Exception ex)
                            {
                                throw;
                            }
                           
                        }

                    }
                }
            
        }