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自带方法
 * 停止运行时会执行
 * */
 void OnDestroy()
 {
 //关闭连接,分接收功能和发送功能,both为两者均关闭
 clientSocket.Shutdown(SocketShutdown.Both);
 clientSocket.Close();
 }
}

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

相关文章

  • C#对称加密与非对称加密实例

    C#对称加密与非对称加密实例

    这篇文章主要介绍了C#对称加密与非对称加密实例,详细分析了对称加密与非对称加密的原理与具体实现方法,具有一定的实用价值,需要的朋友可以参考下
    2014-10-10
  • C#实现清除IE浏览器缓存的方法

    C#实现清除IE浏览器缓存的方法

    这篇文章主要介绍了C#实现清除IE浏览器缓存的方法,实例分析了C#针对浏览器缓存清理所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • Unity ScrollView实现动态列表生成

    Unity ScrollView实现动态列表生成

    这篇文章主要为大家详细介绍了Unity ScrollView实现动态列表生成,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C# 中闭包(Closure)详解

    C# 中闭包(Closure)详解

    这篇文章主要介绍了C# 中闭包(Closure)详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • c# 圆形识别方案和直线识别方案的参考示例

    c# 圆形识别方案和直线识别方案的参考示例

    这篇文章主要介绍了c# 圆形识别方案和直线识别方案的实现示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#设计模式之外观模式介绍

    C#设计模式之外观模式介绍

    外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个借口使得这子系统容易使用
    2012-10-10
  • 详解C#实现在Excel单元格中应用多种字体格式

    详解C#实现在Excel单元格中应用多种字体格式

    在Excel中,可对单元格中的字符串设置多种不同样式。本文,将以C#及VB.NET代码为例,介绍如何在Excel同一个单元格中应用多种字体样式,感兴趣的可以了解一下
    2022-05-05
  • Unity实现红酒识别的示例代码

    Unity实现红酒识别的示例代码

    本文主要介绍了如何通过Unity实现红酒识别,可以实现识别图像中的红酒标签,返回红酒名称、国家、产区、酒庄、类型、糖分、葡萄品种、酒品描述等信息,感兴趣的可以学习一下
    2022-02-02
  • C#实现文字转语音功能

    C#实现文字转语音功能

    这篇文章主要为大家详细介绍了C#实现文字转语音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C# 操作 access 数据库的实例代码

    C# 操作 access 数据库的实例代码

    这篇文章主要介绍了C# 操作 access 数据库的实例代码,需要的朋友可以参考下
    2018-03-03

最新评论