unity使用socket实现聊天室功能
本文实例为大家分享了unity使用socket实现聊天室的具体代码,供大家参考,具体内容如下
unity聊天室服务端实现
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Net.Sockets; usingSystem.Net; namespace服务端_03 { classProgram { staticstringip="192.168.0.102"; staticintport=7788; staticListclientLists=newList (); publicstaticvoidBrocastMessage(strings) { varnotConnectLists=newList (); foreach(varclientinclientLists) { if(client.Connected) { client.SendMessage(s); } else { notConnectLists.Add(client); } } foreach(varclientinnotConnectLists) { clientLists.Remove(client); } } staticvoidMain(string[]args) { SockettcpServer=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); IPEndPointiPEnd=newIPEndPoint(IPAddress.Parse(ip),port); tcpServer.Bind(iPEnd); tcpServer.Listen(100); Console.WriteLine("服务器已开启..."); while(true) { SocketclientSocket=tcpServer.Accept(); Clientclient=newClient(clientSocket); //client.ReceiveMessage(); clientLists.Add(client); } } } }
服务端Client类
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Net.Sockets; usingSystem.Threading; namespace服务端_03 { classClient { SocketclientSocket; byte[]data=newbyte[1024]; Threadt; publicClient(SocketclientSocket) { this.clientSocket=clientSocket; t=newThread(ReceiveMessage); t.Start(); } publicvoidSendMessage(strings) { byte[]data=Encoding.UTF8.GetBytes(s); clientSocket.Send(data); } publicvoidReceiveMessage() { while(true) { if(clientSocket.Poll(10,SelectMode.SelectRead)) { clientSocket.Close(); break; } intlength=clientSocket.Receive(data); stringmessage=Encoding.UTF8.GetString(data,0,length); //dosomething向所有的客户端广播消息 Program.BrocastMessage(message); Console.WriteLine(message);; } } publicboolConnected { get{returnclientSocket.Connected;} } } }
unity客户端实现
usingSystem.Net; usingSystem.Net.Sockets; usingSystem.Text; usingSystem.Threading; usingUnityEngine; usingSystem.Collections; usingUnityEngine.UI; publicclassChatClient:MonoBehaviour { publicstringipaddress="172.25.14.165"; publicintport=7799; privateSocketclientSocket; publicInputFieldMessageInput; publicTextMessageText; privateThreadthread; privatebyte[]data=newbyte[1024];//数据容器 privatestringmessage=""; voidStart() { ConnectToServer(); } voidUpdate() { //只有在主线程才能更新UI if(message!=""&&message!=null) { MessageText.text+="\n"+message; message=""; } } /** *连接服务器端函数 **/ voidConnectToServer() { clientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //跟服务器连接 clientSocket.Connect(newIPEndPoint(IPAddress.Parse(ipaddress),port)); //客户端开启线程接收数据 thread=newThread(ReceiveMessage); thread.Start(); } voidReceiveMessage() { while(true) { if(clientSocket.Connected==false) { break; } intlength=clientSocket.Receive(data); message=Encoding.UTF8.GetString(data,0,length); print(message); } } newvoidSendMessage(stringmessage) { byte[]data=Encoding.UTF8.GetBytes(message); clientSocket.Send(data); } publicvoidOnSendButtonClick() { stringvalue=MessageInput.text; SendMessage(value); MessageInput.text=""; } /** *unity自带方法 *停止运行时会执行 **/ voidOnDestroy() { //关闭连接,分接收功能和发送功能,both为两者均关闭 clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。