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();
 }
}

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

(0)

相关推荐

  • C#制作简单的多人在线即时交流聊天室

    实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询.长连接+长轮询.基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSocket,当然HTML5目前在PC端并没有被所有浏览器支持,所以我的这个聊天室仍是基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室,这个聊天室其实是我上周周末完成的,功能简单,可能有些不足,但可以满足在线即时聊天需求,分享也是给大家提供一个思路,大家可以基于此来实现更好的在线即时聊

  • Unity实现聊天室功能

    本文实例为大家分享了Unity实现聊天室功能的具体代码,供大家参考,具体内容如下 简单聊天室功能,客户端发送消息后,服务器接收到消息后分发到其它客户端上并显示聊天内容 聊天室服务器 服务器需要有以下几个步骤 1.确定Socket协议类型(采用TCP协议或者UDP协议) 2.绑定服务器的IP地址和端口号 3.设置最大监听数量 4.等到连接并处理消息 由于服务器属于一对多的处理关系,因为我们需要用线程来监听消息: class Client { private Socket clientSocket;

  • 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 Prog

  • java利用Socket实现聊天室功能实例

    最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人. 目录结构: ChatClient: package com.panda.chat; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; @SuppressWarnings("serial") public class ChatClient extend

  • Java Socket实现聊天室功能

    本文实例为大家分享了Java Socket实现聊天室的具体代码,供大家参考,具体内容如下 1 创建登录判断类UserLogin import java.util.HashSet; import java.util.Set; public class UserLogin {     public static boolean login(String username) {         Set<String> set = initUser();         // set中含有该usern

  • unity使用socket编程实现聊天室功能

    本文实例为大家分享了unity使用socket实现聊天室功能的具体代码,供大家参考,具体内容如下 示例: 什么是Socket: Socket(套接字),用来描述IP地址和端口,是通信链的句柄,应用程序可以通过Socket向网络发送请求或者应答网络请求!Socket是支撑TCP/IP协议的网络通信的基本操作单元,是对网络通信过程中端点的抽象表示,包含了进行网络通信所必须的五种信息:连接使用的协议,本地主机的IP地址,本地远程的协议端口,远地主机的IP地址,远地进程的协议端口. 通信模型: 服务端实

  • Java Socket通信之聊天室功能

    本文实例为大家分享了Java Socket聊天室功能的具体代码,供大家参考,具体内容如下 Client.java import java.io.*; import java.net.*; import java.util.*; public class Client { public int port = 8083; Socket socket = null; public static void main(String[] args) { new Client(); //开始执行 } publ

  • C++基于socket UDP网络编程实现简单聊天室功能

    本文实例为大家分享了C++基于socket UDP实现简单聊天室功能的具体代码,供大家参考,具体内容如下 0.通信步骤流程图 (左:服务器:右:客户端:) 1.服务器代码 1.1服务器类头文件(CServer_UDP.h) #pragma once #include <winsock2.h> class CServer_UDP { public: CServer_UDP(); void SendMsg(const char sendBuf[]); void RecMsg(); ~CServer

  • Nodejs实现多房间简易聊天室功能

    1.前端界面代码 前端不是重点,够用就行,下面是前端界面,具体代码可到github下载. 2.服务器端搭建 本服务器需要提供两个功能:http服务和websocket服务,由于node的事件驱动机制,可将两种服务搭建在同一个端口下. 1.包描述文件:package.json,这里用到了两个依赖项,mime:确定静态文件mime类型,socket.io:搭建websocket服务,然后使用npm install  安装依赖 { "name": "chat_room",

  • java实现一个简单TCPSocket聊天室功能分享

    本文实例为大家分享了java实现TCPSocket聊天室功能的相关代码,供大家参考,具体内容如下 1.TCPserver.java import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; public class TCPserver{ private static final int SERVERPORT = 8888; private ServerSocket MyServe

  • Android 基于Socket的聊天室实例

    Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信. Client A  发信息给 Client B ,  A的信息首先发送信息到服务器Server ,Server接受到信息后再把A的信息广播发送给所有的Clients 首先我们要在服务器建立一个ServerSocket ,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待

随机推荐