Unity 简易聊天室(基于TCP)(2)

客户端用Unity开发,主要就是搭建一下聊天室的UI界面:输入框,聊天内容显示框,发送按钮

灰色背景的就是Message,也就是聊天内容的显示框,是一个Text类型,这里创建UI方面就不多讲了

在Canvas下挂一个ChatManager脚本

using System;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using UnityEngine.UI;
using System.Text;

public class ChatManager : MonoBehaviour {
  private Socket clientSocket;

  private Button btn;
  private InputField inputField;
  private Text showMessage;

  private byte[] data = new byte[1024];

  private string msg = "";

  void Start()
  {

    //创建一个socket,绑定和服务器一样的ip和端口号,然后执行Connect就可以连接上服务器了(服务器已经运行)
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6688));

    btn = transform.Find("Button").GetComponent<Button>();
    btn.onClick.AddListener(OnSendClick);

    inputField = transform.Find("InputField").GetComponent<InputField>();
    showMessage = transform.Find("BG/Message").GetComponent<Text>();

    ClientStart();
  }

  void Update()
  {

    if(msg!=null && msg != "")
    {
      showMessage.text += msg+"\n";回调函数不能调用Unity的组件、UI;所以只能在Update里用,而不能直接在ReceiveCallBack(回调函数不属于Unity的主线程)
      msg = "";
    }
  }

  private void OnSendClick()  //绑定到发送按钮的方法
  {
    if (inputField.text != "")
    {
      byte[] databytes = Encoding.UTF8.GetBytes(inputField.text);
      clientSocket.Send(databytes);
      inputField.text = "";
    }
  }

  private void ClientStart()  //开始接收从服务器发来的消息
  {
    clientSocket.BeginReceive(data, 0, 1024,SocketFlags.None, ReceiveCallBack, null);
  }

  private void ReceiveCallBack(IAsyncResult ar)
  {
    try
    {  
      if (clientSocket.Connected == false)
      {
        clientSocket.Close();
        return;
      }
      int len = clientSocket.EndReceive(ar);
      string message = Encoding.UTF8.GetString(data, 0, len);
      msg = message;
      ClientStart();  //重复接收从服务器发来的信息
    }
    catch(Exception e)
    {
      Debug.Log("ReceiveCallBack:" + e);
    }
  }

  void OnDestroy()
  {
    clientSocket.Close();
  }

}

原文地址:https://www.cnblogs.com/darkif/p/10072479.html

时间: 2024-10-08 17:41:48

Unity 简易聊天室(基于TCP)(2)的相关文章

基于C/S模式的简易聊天室

一.任务简要描述 移动互联网技术的广泛应用为人们提供了非常便捷的沟通方式.QQ.微信和微博等是便携式聊天系统的典型代表,它们的功能非常强大. 本系统利用TCP/IP协议的Socket和ServerSocket类,实现基于C/S模式的简易聊天室.该聊天室包括服务端和客户端两部分,服务端是客户端发送消息的中转站:客户端之间可以直接通信,也可以与服务器通信.聊天结束后客户端断开与服务端的连接,服务器也可以停止信息中转服务. 二.系统需求分析 本系统采用C/S软件架构,服务器端负责监听客户端发来的消息,

Socket编程(简易聊天室客户端/服务器编写、CocoaAsyncSocket)

Socket编程(简易聊天室客户端/服务器编写.CocoaAsyncSocket) 一.Socket 1.1 Socket简介 Socket就是为网络服务提供的一种机制.网络通信其实就是Socket间的通信,通信的两端都是Socket,数据在两个Socket间通过IO传输. 在Web服务大行其道的今天,调用Web服务的代价是高昂的,尤其是仅仅是抓取少量数据的时候尤其如此.而使用Socket,可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销.Socket允许使用长连接,允许应用程序运

socket.io入门,简易聊天室

介绍 通常我们web使用的是http协议,但是 HTTP 协议有一个缺陷:通信只能由客户端发起. 所以我们需要一个可以由服务端主动发出的协议,即WebSocket. WebSocket是HTML5新增的一种通信协议,其特点是服务端可以主动向客户端推送信息,客户端也可以主动向服务端发送信息,是真正的双向平等对话,属于服务器推送技术的一种. Socket.IO 是一个基于 Node.js 的实时应用程序框架,在即时通讯.通知与消息推送,实时分析等场景中有较为广泛的应用. socket.io 包含两个

php+websocket搭建简易聊天室实践

1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短连接和长连接.短连接一般可以用ajax实现,长连接就是websocket.短连接实现起来比较简单,但是太过于消耗资源.websocket高效不过兼容存在点问题.websocket是html5的资源 如果想要详细了解websocket长连接的原理请看https://www.zhihu.com/ques

php_3_“简易聊天室 ”实现的关键技术 详解

                  PHP+MySQL实现Internet上一个简易聊天室的关键技术  系统目标: 聊天室使用数据库汇集每个人的发言,并可将数据库内的发言信息显示在页面,让每个用户都可以看到,具体功能如下: a.用户登录:用户发言时显示其登录名信息 b.用户发言:用户输入说的话 c.显示发言信息:用户浏览所有发言信息 设计思路: (1).建立聊天室数据库及相关数据表 (2).实现用户登录页面(login.php) (3).实现发言页面(speak.php) (4).实现发言显示页

docker搭建swoole简易聊天室

docker搭建swoole的简易聊天室 首先pull镜像 docker pull docker.io/kong36088/nginx-php7-swoole 创建容器 docker run --name {自己创建的名字} -p 9501:9501 -p 8089:80 -d -it kong36088/nginx-php7-swoole /bin/bash 进入容器 docker exec -it {容器名字或id} /bin/bash 进入容器之后进入nginx配置文件 cd /etc/n

[Redis]-Redis简易聊天室

代码来自图书<左手MongoDB,右手Redis>第六章-简易聊天室 1.下载代码 2.安装部署py运行环境 yum install python3 -y yum install python-virtualenv -y pip install pipenv pip install --upgrade pip 3.运行代码 cd /RedisChat/ pipenv install export FLASK_APP=main.py flask run -h 10.0.0.51 -p 5000

《基于Node.js实现简易聊天室系列之详细设计》

一个完整的项目基本分为三个部分:前端.后台和数据库.依照软件工程的理论知识,应该依次按照以下几个步骤:需求分析.概要设计.详细设计.编码.测试等.由于缺乏相关知识的储备,导致这个Demo系列的文章层次不是很清楚,索性这一章将所有的过程(前后端以及数据库)做一个介绍,下一章写完总结就OK了吧. (1)前端部分 涉及到的技术:html.css.bootstrap.jquery.jquery UI 登录/注册界面使用的是bootstrap响应式布局,即支持不同尺寸的客户端,以此提高用户的体验.在这之前

《基于Node.js实现简易聊天室系列之引言》

简述:这个聊天室是基于Node.js实现的,完成了基本的实时通信功能.在此之前,对node.js和mongodb一无所知,但是通过翻阅博客,自己动手基本达到了预期的效果.技术,不应该是闭门造车,而是学会分享总结才能进步.因此,我想记录下我的学习心得.不喜勿喷. 技术选型: 数据库:mongodb 实时通信:socket.io 服务器:node.js 后台:node.js 前端js库:jquery 数据库之所以选择mongodb,是因为mongodb是介于关系型与非关系型之间的一款产品,存储格式为