小白学习贴: C# TCP服务器
来源:互联网 发布:vevo lazr软件下载 编辑:程序博客网 时间:2024/06/05 11:01
刚入行3周,boss让我写个TCP服务器+客户端…
只是单纯实现功能,等经验丰富后会回头来优化
用户登录的时候是通过Redis缓存服务器来判断,现在还没有接触到和MySQL交互.
如果有大牛经过,劳烦你指出不足
//主函数入口 IRedisClient Redis = RedisManager.GetClient(); listerSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp); listerSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6523)); listerSocket.Listen(4); Console.WriteLine("服务器已启动"); OnLoginQuestEvent += new LoginDel(OnLogin); while (true) { Console.WriteLine("服务器正在等待连接"); Socket socketConn = listerSocket.Accept(); socketDic.Add(socketConn.RemoteEndPoint.ToString(), socketConn); Console.WriteLine("服务器连接成功"); Thread thr = new Thread(RecMsg); thr.IsBackground = true; thr.Start(socketConn); try { thrDic.Add(socketConn.RemoteEndPoint.ToString(), thr); } catch (System.Exception e) { Console.WriteLine(e.ToString()); } } /// <summary> /// 处理数据 /// </summary> /// <param name="socket"></param> static void RecMsg(object socket) { Socket clientSocket = (Socket)socket; bool isQuest = true;//每人一个 while (true) { byte[] arrMsgRec = new byte[1024 * 1024]; int len = 0; try { Console.WriteLine("正在等待" + clientSocket.RemoteEndPoint.ToString() + "用户的输入"); len = clientSocket.Receive(arrMsgRec, len, arrMsgRec.Length - len, SocketFlags.None); string count = Encoding.UTF8.GetString(arrMsgRec, 0, len); Console.WriteLine(clientSocket.RemoteEndPoint.ToString() + ":\t" + count); if (count != "ok") { Console.WriteLine(isQuest); if (isQuest) { if (OnLoginQuestEvent != null) { OnLoginQuestEvent(clientSocket, count, ref isQuest); } } } else { isQuest = false; } } catch (SocketException se) { Console.WriteLine(se.Message); socketDic.Remove(clientSocket.RemoteEndPoint.ToString()); thrDic.Remove(clientSocket.RemoteEndPoint.ToString()); break; } } } /// <summary> /// 效验密码 /// </summary> /// <param name="socket"></param> /// <param name="str"></param> public static void OnLogin(Socket socket, string str, ref bool isQuest)//改变用户的isQuest { JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("Puser.txt")); foreach (JsonData temp in jsonData) { JsonData idValue = temp["id"]; JsonData nameValue = temp["name"]; JsonData passworld = temp["passworld"]; JsonData WhetherCon = temp["WhetherCon"]; int id = int.Parse(idValue.ToString()); string uname = nameValue.ToString(); string pwd = passworld.ToString(); string wcon = WhetherCon.ToString(); using (var redisClient = RedisManager.GetClient()) { var user = redisClient.As<User>(); var newUser = new User { Id = Convert.ToInt32(user.GetNextSequence()), Name = uname, passworld = pwd, WhetherCon = wcon }; user.Store(newUser); } if (socket != null && str != null) { JObject jo = (JObject)JsonConvert.DeserializeObject(str); string name = jo["Name"].ToString(); string pwas = jo["passworld"].ToString(); string WerCon = jo["WhetherCon"].ToString(); using (var redisClient = RedisManager.GetClient()) { var user = redisClient.As<User>(); var userList = user.GetAll().Where(b => b.Name.Contains(name)).ToList(); if (userList.Count > 0) { for (int i = 0; i < userList.Count; i++) { if (userList[i].passworld == pwas && userList[i].WhetherCon != "1") { userList[i].WhetherCon = "1"; User ss = new User(); userList[i].WhetherCon = "1"; Console.WriteLine("登录成功"); socket.Send(Encoding.UTF8.GetBytes("CanConnection")); isQuest = false; break; } } if (isQuest == true) { Console.WriteLine("登录失败"); socket.Send(Encoding.UTF8.GetBytes("notConnection")); } } } } } }
阅读全文
0 0
- 小白学习贴: C# TCP服务器
- C#学习笔记-socket通信(同步,客户端+服务器,TCP)
- [c#源码分享]客户端程序通过TCP通信传送"小文件"到服务器
- C# TCP多线程服务器示例
- C# TCP多线程服务器示例
- C# TCP多线程服务器示例
- C# TCP学习笔记
- Java学习笔记(一)------服务器&客户端一对一通信小程序实现(TCP)
- python学习:编写TCP服务器&UDP服务器
- C#异步TCP服务器完整实现
- c# 智能电饭锅服务器 tcp连接 笔记
- c#异步Socket Tcp服务器实现
- C# Socket TCP通信,连接服务器
- C#异步TCP服务器完整实现
- java学习之完整tcp服务器模型
- UNIX再学习 -- TCP/UDP 客户机/服务器
- node.js学习之创建TCP服务器
- linux下编写tcp服务器学习笔记
- JVM 堆、栈、常量池、对象创建(摘抄书上的内容,当做笔记吧)
- git杂记
- 正则表达式表单验证实例
- 虚拟币开发专题(数字货币怎样从POW挖矿迁移到POS利息)
- pip 从本地文件夹安装
- 小白学习贴: C# TCP服务器
- json数据格式
- OSG渲染状态管理
- c++初始化
- awk(3)-awk getline
- codova安装与打包H5项目
- Android开发——ViewPage与TabLayout和BottomNavigationView
- leetcode_22_Generate Parentheses
- 记于7月11号的第一篇博文