文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Unity实现聊天室功能

2024-04-02 19:55

关注

本文实例为大家分享了Unity实现聊天室功能的具体代码,供大家参考,具体内容如下

简单聊天室功能,客户端发送消息后,服务器接收到消息后分发到其它客户端上并显示聊天内容

聊天室服务器

服务器需要有以下几个步骤

1、确定Socket协议类型(采用TCP协议或者UDP协议)
2、绑定服务器的IP地址和端口号
3、设置最大监听数量
4、等到连接并处理消息

由于服务器属于一对多的处理关系,因为我们需要用线程来监听消息:


class Client
 {
  private Socket clientSocket;
  private Thread t;
  public bool Connected
  {
   get
   {
    return clientSocket.Connected;
   }
  }
  private byte[] data = new byte[1024];//数据容器
  public Client(Socket client)
  {
   clientSocket = client;
   //启动一个线程,处理客户端的接受
   t = new Thread(ReceiveMsg);
   t.Start();
  }

  private void ReceiveMsg()
  {
   while (true)
   {
    //在接收数据之前,判断Socket连接是否断开
    if (!clientSocket.Connected)
    {
     clientSocket.Close();
     break;//跳出循环终止线程的执行
    }
    int length=clientSocket.Receive(data);
    string msg = Encoding.UTF8.GetString(data, 0, length);
    //服务端接收数据后,要将数据分发到客户端
    //广播消息
    Program.BroadcastMsg(msg);
   }
  }

  public void SendMsg(string msg)
  {
   byte[] data = Encoding.UTF8.GetBytes(msg);
   clientSocket.Send(data);
  }

  
 }

服务器主要代码:


class Program
 {
  static List<Client> clients = new List<Client>();
  //本机IP:192.168.100.172
  static void Main(string[] args)
  {
   Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   tcpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.100.172"), 7788));
   tcpServer.Listen(5000);
   Console.WriteLine("Server Running.......");
   while (true)
   {
    var clientSocket = tcpServer.Accept();
    Console.WriteLine("建立连接");
    Client client = new Client(clientSocket);
    clients.Add(client);
   }
  }

  public static void BroadcastMsg(string msg)
  {
   var noConnecteds = new List<Client>();
   foreach (var client in clients)
   {
    if (client.Connected)
    {
     client.SendMsg(msg);
    }
    else
    {
     noConnecteds.Add(client);
    }
   }
   foreach (var del in noConnecteds)
   {
    clients.Remove(del);
   }
  }
}

Unity客户端代码

Unity客户端代码就十分简单,监听服务器的消息并显示到界面上即可


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Text;
using UnityEngine.UI;
using System.Threading;
public class ChatManager : MonoBehaviour
{
 public string IP = "192.168.100.172";
 public int Port = 7788;
 private Socket client;
 private Thread t;
 public InputField input;
 public Button sendBtn;
 public Text item;

 public string name;

 private string msg=string.Empty;
 // Start is called before the first frame update
 void Start()
 {
  ConnectedToServer();
  sendBtn.onClick.AddListener(() => {
   SendMsg(input.text);
   input.text = string.Empty;
  });
 }

 // Update is called once per frame
 void Update()
 {
  //由于在Unity中不允许在线程中调用UnityAPI,因此需要的Update中刷新显示
  if (!string.IsNullOrEmpty(msg))
  {
   item.text += "\n" + msg;
   msg = string.Empty;
  }
 }

 private void ConnectedToServer()
 {
  client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  client.Connect(new IPEndPoint(IPAddress.Parse(IP), Port));
  //创建一个线程用来接收消息
  t = new Thread(ReceiveMsg);
  t.Start();
 }
 byte[] data = new byte[1024];
 public void ReceiveMsg()
 {
  while (true)
  {
   if (!client.Connected)
   {
    break;
   }
   int length = client.Receive(data);
   msg = Encoding.UTF8.GetString(data, 0, length);

  }
 }
 public void SendMsg(string msg)
 {
  byte[] data = Encoding.UTF8.GetBytes(name+":"+msg);
  client.Send(data);
 }

 public void OnDestroy()
 {
  client.Close();
 }
}

实际运行效果(注意需要先启动服务器):

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯