最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity實(shí)現(xiàn)聊天室功能

 更新時(shí)間:2021年03月11日 08:30:09   作者:雙魚-布衣  
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Unity實(shí)現(xiàn)聊天室功能的具體代碼,供大家參考,具體內(nèi)容如下

簡(jiǎn)單聊天室功能,客戶端發(fā)送消息后,服務(wù)器接收到消息后分發(fā)到其它客戶端上并顯示聊天內(nèi)容

聊天室服務(wù)器

服務(wù)器需要有以下幾個(gè)步驟

1、確定Socket協(xié)議類型(采用TCP協(xié)議或者UDP協(xié)議)
2、綁定服務(wù)器的IP地址和端口號(hào)
3、設(shè)置最大監(jiān)聽數(shù)量
4、等到連接并處理消息

由于服務(wù)器屬于一對(duì)多的處理關(guān)系,因?yàn)槲覀冃枰镁€程來監(jiān)聽消息:

class Client
 {
  private Socket clientSocket;
  private Thread t;
  public bool Connected
  {
   get
   {
    return clientSocket.Connected;
   }
  }
  private byte[] data = new byte[1024];//數(shù)據(jù)容器
  public Client(Socket client)
  {
   clientSocket = client;
   //啟動(dòng)一個(gè)線程,處理客戶端的接受
   t = new Thread(ReceiveMsg);
   t.Start();
  }

  private void ReceiveMsg()
  {
   while (true)
   {
    //在接收數(shù)據(jù)之前,判斷Socket連接是否斷開
    if (!clientSocket.Connected)
    {
     clientSocket.Close();
     break;//跳出循環(huán)終止線程的執(zhí)行
    }
    int length=clientSocket.Receive(data);
    string msg = Encoding.UTF8.GetString(data, 0, length);
    //服務(wù)端接收數(shù)據(jù)后,要將數(shù)據(jù)分發(fā)到客戶端
    //廣播消息
    Program.BroadcastMsg(msg);
   }
  }

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

  
 }

服務(wù)器主要代碼:

class Program
 {
  static List<Client> clients = new List<Client>();
  //本機(jī)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客戶端代碼就十分簡(jiǎn)單,監(jiān)聽服務(wù)器的消息并顯示到界面上即可

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中不允許在線程中調(diào)用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));
  //創(chuàng)建一個(gè)線程用來接收消息
  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();
 }
}

實(shí)際運(yùn)行效果(注意需要先啟動(dòng)服務(wù)器):

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 輕松學(xué)習(xí)C#的正則表達(dá)式

    輕松學(xué)習(xí)C#的正則表達(dá)式

    輕松學(xué)習(xí)C#的正則表達(dá)式,對(duì)C#的正則表達(dá)式感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的正則表達(dá)式
    2015-11-11
  • Unity3D實(shí)現(xiàn)射線使物體移動(dòng)

    Unity3D實(shí)現(xiàn)射線使物體移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)射線使物體移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果

    C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • c#幾種數(shù)據(jù)庫(kù)的大數(shù)據(jù)批量插入(SqlServer、Oracle、SQLite和MySql)

    c#幾種數(shù)據(jù)庫(kù)的大數(shù)據(jù)批量插入(SqlServer、Oracle、SQLite和MySql)

    這篇文章主要介紹了c#幾種數(shù)據(jù)庫(kù)的大數(shù)據(jù)批量插入(SqlServer、Oracle、SQLite和MySql),需要的朋友可以了解一下。
    2016-11-11
  • C#實(shí)現(xiàn)XML文件操作詳解

    C#實(shí)現(xiàn)XML文件操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)XML操作文件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度的示例代碼

    C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度的示例代碼

    使用 Quartz.NET,你可以很容易地安排任務(wù)在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行,或者每天、每周、每月的特定時(shí)間運(yùn)行,甚至可以基于更復(fù)雜的調(diào)度規(guī)則,本文給大家介紹了C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度,需要的朋友可以參考下
    2024-04-04
  • C#中使用WinRAR實(shí)現(xiàn)加密壓縮及解壓縮文件

    C#中使用WinRAR實(shí)現(xiàn)加密壓縮及解壓縮文件

    這篇文章主要介紹了C#中使用WinRAR實(shí)現(xiàn)加密壓縮及解壓縮文件,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-07-07
  • C#中緩存的基本用法總結(jié)

    C#中緩存的基本用法總結(jié)

    這篇文章主要介紹了C#中緩存的基本用法,對(duì)C#初學(xué)者來說是很有必要熟練掌握的內(nèi)容,需要的朋友可以參考下
    2014-08-08
  • Unity shader實(shí)現(xiàn)多光源漫反射以及陰影

    Unity shader實(shí)現(xiàn)多光源漫反射以及陰影

    這篇文章主要為大家詳細(xì)介紹了shader實(shí)現(xiàn)多光源漫反射以及陰影,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C#套接字(Socket)通信之UDP組播詳解

    C#套接字(Socket)通信之UDP組播詳解

    單播 Unicast是指客戶端與服務(wù)器之間的點(diǎn)到點(diǎn)連接,組播和單播的差別是,必須得有一個(gè)“組”的概念,然后才能進(jìn)行組播,本文就來和大家講講UDP組播的實(shí)現(xiàn)吧
    2023-05-05

最新評(píng)論

丹巴县| 怀来县| 桐柏县| 凤翔县| 蒙城县| 灌南县| 满城县| 宣威市| 田阳县| 桂阳县| 广宗县| 体育| 扶沟县| 唐山市| 德兴市| 乡宁县| 普宁市| 闻喜县| 介休市| 蓝山县| 酒泉市| 长泰县| 维西| 临泉县| 乐东| 济宁市| 石棉县| 深水埗区| 贺兰县| 漠河县| 全椒县| 中阳县| 长治市| 东丰县| 云浮市| 班戈县| 涞源县| 玛纳斯县| 永和县| 吉林省| 长宁县|