软件编程
位置:首页>> 软件编程>> C#编程>> unity使用socket实现聊天室功能

unity使用socket实现聊天室功能

作者:ai上白菜  发布时间:2021-08-12 01:57:59 

标签: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实现聊天室功能

unity使用socket实现聊天室功能

unity使用socket实现聊天室功能

来源:https://blog.csdn.net/qq_36559726/article/details/79421520

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com