自己写的Unity聊天工具
来源:互联网 发布:jpg转换矢量图软件 编辑:程序博客网 时间:2024/06/06 00:10
今天上点干货出来,其实就是上学期的一个网络编程的作业,用Unity做的客户端,用C#直接写的服务端,代码是最简单的Socket编程,基本没有难的东西,不过如果像一年前的我那么菜的话(其实现在也超菜的)应该还是会有点用的。
这里就直接上源码了,真有看了还不会的可以评论哈。
服务端
using System;using System.Collections.Generic;using System.Linq;using System.Net.Sockets;using System.Net;using System.Text;using System.Threading.Tasks;using System.Diagnostics;namespace SocketServer{ class Program { public static List<Client> clientList = new List<Client>(); static void Main(string[] args) { Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); tcpServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6789)); tcpServer.Listen(100); while (true) { Socket clientSocket = tcpServer.Accept(); Console.WriteLine("有一个客户端连接"); Client client = new Client(clientSocket); clientList.Add(client); } } /// <summary> /// 广播 /// </summary> /// <param name="s"></param> public static void BorodCast(string s,string username) { foreach (var item in clientList) { if (item.username != username) { byte[] data = Encoding.UTF8.GetBytes(s); item.SendMessage(s); } } } public static Client FindByName(string name) { foreach (var item in clientList) { if (item.username == name) return item; } return null; } }}
监听到连接后创建Client并把Socket传过去,下面是Client类的代码
using System;using System.Collections.Generic;using System.Linq;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;namespace SocketServer{ class Client { public string username; private Socket clientSocket; private Thread t; private byte[] data = new byte[1024]; public Client(Socket clientSocket) { this.clientSocket = clientSocket; t = new Thread(ReceiveMessage); t.Start(); } /// <summary> /// 服务器接受消息 /// </summary> private void ReceiveMessage() { while (true) { int bytes = clientSocket.Receive(data); string s = Encoding.UTF8.GetString(data, 0, bytes); string[] p = s.Split(' '); Console.WriteLine(s); switch (p[0]) { case "RequestLogin": ResponseLogin(p[1]); break; case "RequestChat": Console.WriteLine("接收到来自" + username + "对" + p[1] + "的聊天请求"); ResponseChat(p[1]); break; case "Chat": Transmit(p[1],p[2]); break; case "ChatRoom": BroadCast(p[1]); break; } } } /// <summary> /// 响应登录 /// </summary> /// <param name="s"></param> private void ResponseLogin(string s) { username = s; string temp = "LoginSuccessful "; foreach (var item in UserInfo.user.Keys) { temp += item + " "; } Console.WriteLine("开始发送Ending" ); temp += "Ending"; clientSocket.Send(Encoding.UTF8.GetBytes(temp)); Console.WriteLine("发送wancheng"); Broad(s); } private void Broad(string s) { if (UserInfo.user.ContainsKey(s)) { UserInfo.user[s] = true; } else { UserInfo.user.Add(s, true); Program.BorodCast("NewUser" + " " + s, username); } } /// <summary> /// 对聊天请求的回应 /// </summary> /// <param name="s"></param> private void ResponseChat(string s) { if(UserInfo.user.ContainsKey(s)) { if(UserInfo.user[s]==true) { foreach (var item in Program.clientList) { if (s == item.username) item.SendChatRequest(username); } } } } public void SendMessage(string s) { byte[] response = Encoding.UTF8.GetBytes(s); clientSocket.Send(response); } /// <summary> /// 向被呼叫的客户端发送消息 /// </summary> /// <param name="name"></param> public void SendChatRequest(string name) { byte[] response = Encoding.UTF8.GetBytes("Called"+" "+name); this.clientSocket.Send(response); } public void Transmit(string a,string b) { Program.FindByName(a).SendMessage("Chat"+" "+username + " " + b); } public void BroadCast(string s) { string str="ChatRoom"+" "+s; Program.BorodCast(str,username); } }}
//存储用户信息的类
namespace SocketServer{ static class UserInfo { public static Dictionary<string, bool> user = new Dictionary<string, bool>(); }}
客户端Unity写的参杂太多UI什么的代码这里就不发了,客户端和服务端的源码稍后我直接传资源里,需要的同学可以直接下载,对了别吐槽我消息都是单词,设计个协议什么的哪有直接用单词简单
这几天还在自编自导的做一个辣鸡卡牌游戏,做了类似CS的局域网联机模式,大厅啊建主啊加入啊什么的都有,等我把代码整理下(主要是把无关的代码去掉),写好注释就发上来,有比我还菜想学习的同学记着关注,大家共同学习。
源码下载地址:http://download.csdn.net/detail/kzhenguo/9908231
阅读全文
0 0
- 自己写的Unity聊天工具
- 无聊时写的DOS聊天工具
- 关于自己设计的聊天工具的架构思想
- 一天时间用OpenFire打造自己的IM聊天工具
- UDP协议+C#写的一款局域网聊天工具+源代码
- 最近在玩android,突然想做一个私人聊天工具,缺乏一个服务器,于是自己想写一个c实现的daemon select server
- 自己写的UnitY实用小工具或脚本——文本管理器
- 自己写的UnitY实用小工具或脚本——读取Texture序列帧动画
- 自己写的UnitY实用小工具或脚本——AR阴影以及Mask遮挡
- 网络聊天工具的实现
- java做的聊天工具
- 基于socket的聊天工具
- 聊天工具的架构分析
- java做的聊天工具
- 终端下的聊天工具
- UDP协议+C#写的局域网带窗体抖动的聊天工具源代码
- Openfire+Spark+Spark Web安装配置(配置自己的聊天工具)
- 写自己的rss
- Ubuntu下Mysql 5.7.19 root密码重置
- cs231n作业一之实现softmax
- Android自定义ViewGroup实现9宫格布局
- 生成器
- js全选checkbox
- 自己写的Unity聊天工具
- codeforces Gym
- 【Hadoop学习】之 伪分布式安装
- 拦截器的测试
- 一周一更之snprintf踩坑记
- define总结
- 抗锯齿
- spring 集合注入案例-票台接口设计
- android studio gradle dependences 包存放在什么位置