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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。