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

unity使用socket實現聊天室功能

 更新時間:2021年03月11日 08:48:57   作者:ai上白菜  
這篇文章主要為大家詳細介紹了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自帶方法
 * 停止運行時會執(zhí)行
 * */
 void OnDestroy()
 {
 //關閉連接,分接收功能和發(fā)送功能,both為兩者均關閉
 clientSocket.Shutdown(SocketShutdown.Both);
 clientSocket.Close();
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 在Form_Load里面調用Focus無效的解決方法

    在Form_Load里面調用Focus無效的解決方法

    在調用Form_Load的時候,Form其實還沒有進入展示階段,自然Focus()調用也就沒效果了。
    2013-02-02
  • C#采用遞歸實現階乘的方法

    C#采用遞歸實現階乘的方法

    這篇文章主要介紹了C#采用遞歸實現階乘的方法,很有借鑒價值的一個算法技巧,需要的朋友可以參考下
    2014-08-08
  • 一款域名監(jiān)控小工具 Domain(IP)Watcher 實現代碼

    一款域名監(jiān)控小工具 Domain(IP)Watcher 實現代碼

    域名是否正常,網站是否可以正常訪問是很頭痛的問題,怎樣簡單地監(jiān)控域名是否可以正常訪問呢,這里發(fā)布一款域名監(jiān)控小工具:Domain(IP)Watcher
    2011-11-11
  • Unity3D實現鼠標控制旋轉轉盤

    Unity3D實現鼠標控制旋轉轉盤

    這篇文章主要為大家詳細介紹了Unity3D實現鼠標控制旋轉轉盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#開發(fā)簡易winform計算器程序

    C#開發(fā)簡易winform計算器程序

    這篇文章主要為大家詳細介紹了C#開發(fā)簡易winform計算器程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 詳解Asp.Net MVC的Bundle捆綁

    詳解Asp.Net MVC的Bundle捆綁

    這篇文章主要介紹了Asp.Net MVC的Bundle捆綁方法,具體實現方法給大家做代碼整理,一起參考一下。
    2017-11-11
  • 重寫、隱藏基類(new, override)的方法

    重寫、隱藏基類(new, override)的方法

    重寫、隱藏基類(new, override)的方法,需要的朋友可以參考一下
    2013-03-03
  • C#中Shear的用法實例

    C#中Shear的用法實例

    這篇文章主要介紹了C#中Shear的用法,實例分析了C#中使用Matrix實現Shear剪切變換的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C#反色處理及其效率問題分析

    C#反色處理及其效率問題分析

    這篇文章主要介紹了C#反色處理及其效率問題分析,實例分析了C#反色處理問題的技巧及相關效率問題,需要的朋友可以參考下
    2015-06-06
  • C# Cache緩存讀取的設置方法

    C# Cache緩存讀取的設置方法

    這篇文章主要介紹了C# Cache緩存讀取的設置方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評論

哈尔滨市| 临泽县| 潮州市| 柳江县| 称多县| 盐山县| 汾西县| 怀仁县| 英德市| 盐山县| 嘉鱼县| 汶上县| 烟台市| 喀喇| 平南县| 凉城县| 通许县| 宁武县| 班玛县| 花莲市| 烟台市| 九龙县| 额尔古纳市| 贵德县| 通渭县| 微博| 剑阁县| 横山县| 丹阳市| 宁津县| 武川县| 百色市| 永州市| 中山市| 潢川县| 响水县| 大同县| 新竹市| 营口市| 忻城县| 镇赉县|