这篇文章主要为大家详细介绍了unity使用socket实现聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了unity使用socket实现聊天室的具体代码,供大家参考,具体内容如下
unity聊天室服务端实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace 服务端_03
{
class Program
{
static string ip = "192.168.0.102";
static int port = 7788;
static List<Client> clientLists = new List<Client>();
public static void BrocastMessage(string s)
{
var notConnectLists = new List<Client>();
foreach (var client in clientLists)
{
if(client.Connected)
{
client.SendMessage(s);
}
else
{
notConnectLists.Add(client);
}
}
foreach (var client in notConnectLists)
{
clientLists.Remove(client);
}
}
static void Main(string[] args)
{
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iPEnd = new IPEndPoint(IPAddress.Parse(ip), port);
tcpServer.Bind(iPEnd);
tcpServer.Listen(100);
Console.WriteLine("服务器已开启...");
while (true)
{
Socket clientSocket = tcpServer.Accept();
Client client = new Client(clientSocket);
//client.ReceiveMessage();
clientLists.Add(client);
}
}
}
}
服务端Client类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Threading;
namespace 服务端_03
{
class Client
{
Socket clientSocket;
byte[] data = new byte[1024];
Thread t;
public Client(Socket clientSocket)
{
this.clientSocket = clientSocket;
t = new Thread(ReceiveMessage);
t.Start();
}
public void SendMessage(string s)
{
byte[] data = Encoding.UTF8.GetBytes(s);
clientSocket.Send(data);
}
public void ReceiveMessage()
{
while (true)
{
if(clientSocket.Poll(10,SelectMode.SelectRead))
{
clientSocket.Close();
break;
}
int length = clientSocket.Receive(data);
string message = Encoding.UTF8.GetString(data, 0, length);
//dosomething 向所有的客户端广播消息
Program.BrocastMessage(message);
Console.WriteLine(message); ;
}
}
public bool Connected
{
get { return clientSocket.Connected; }
}
}
}
unity客户端实现
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ChatClient : MonoBehaviour
{
public string ipaddress = "172.25.14.165";
public int port = 7799;
private Socket clientSocket;
public InputField MessageInput;
public Text MessageText;
private Thread thread;
private byte[] data = new byte[1024];// 数据容器
private string message = "";
void Start()
{
ConnectToServer();
}
void Update()
{
//只有在主线程才能更新UI
if (message != "" && message != null)
{
MessageText.text += "\n" + message;
message = "";
}
}
/**
* 连接服务器端函数
* */
void ConnectToServer()
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//跟服务器连接
clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress), port));
//客户端开启线程接收数据
thread = new Thread(ReceiveMessage);
thread.Start();
}
void ReceiveMessage()
{
while (true)
{
if (clientSocket.Connected == false)
{
break;
}
int length = clientSocket.Receive(data);
message = Encoding.UTF8.GetString(data, 0, length);
print(message);
}
}
new void SendMessage(string message)
{
byte[] data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);
}
public void OnSendButtonClick()
{
string value = MessageInput.text;
SendMessage(value);
MessageInput.text = " ";
}
/**
* unity自带方法
* 停止运行时会执行
* */
void OnDestroy()
{
//关闭连接,分接收功能和发送功能,both为两者均关闭
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持得得之家。
沃梦达教程
本文标题为:unity使用socket实现聊天室功能
猜你喜欢
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- 使用 rss + c# 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01