客户端用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();
  }

}

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

  1. 学习JavaSE TCP/IP协议与搭建简易聊天室

    一.TCP/IP协议 1.TCP/IP协议包括TCP.IP和UDP等 2.域名通过dns服务器转换为IP地址 3.局域网可以通过IP或者主机地址寻找到相应的主机 4.TCP是可靠的连接,效率低,且连接 ...

  2. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  3. Java实现简易聊天室

    Java实现简易聊天室 在学习<Java从入门到精通>这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录. 这里先放一下运行效果图,代码放在最后. 运行效 ...

  4. Socket实现简易聊天室,Client,Server

    package seday08; import java.io.BufferedWriter;import java.io.OutputStream;import java.io.OutputStre ...

  5. Django中使用websocket并实现简易聊天室

    django使用websocket并实现简易聊天室 django默认只支持http协议 如果你想让django即支持http协议又支持websocket协议,则需要做以下配置 前期配置 前提需要安装c ...

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

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  7. node.js+websocket实现简易聊天室

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...

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

                      PHP+MySQL实现Internet上一个简易聊天室的关键技术  系统目标: 聊天室使用数据库汇集每个人的发言,并可将数据库内的发言信息显示在页面,让每个用户都可 ...

  9. Python开发【笔记】:aiohttp搭建简易聊天室

    简易聊天室: 1.入口main.py import logging import jinja2 import aiohttp_jinja2 from aiohttp import web from a ...

  10. 示例:Socket应用之简易聊天室

    在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...

随机推荐

  1. docker 搭建minio

    minio为开源的高可用分部署对象存储服务组件,已经提供了分布式部署的解决方案,实现高可靠.高可用的资源存储,MinIO以极简主义为指导进行设计,追求极致的维护精简性和卓越的读写性能表现. -dock ...

  2. 分享: 第二性 合卷本 竖本.PDF

    书本详情 第二性台版 作者: 西蒙.德.波娃(Simone de Beauvoir)出版社: 貓頭鷹原作名: Le Deuxième Sexe译者: 邱瑞鑾出版年: 2013-10页数: 1136装帧 ...

  3. js,php中的面向对象

    面向对象 js中的面向对象: 面向对象(OOP):通过函数封装得到的一个类 1.类的本质还是函数 每个类(函数)天生有一个prototype的属性,这个prototype又是一个对象,这个对象里有个c ...

  4. Kongmaster

    圣人处无为之事 大智若愚 穷则独善其身,达则兼济天下

  5. vue3 门户网站搭建8-字体

    浏览器默认的可选字体比较少,如果没有合适的则需要额外下载并引入. 一般使用 开源字体即可,商用需要花钱~ 将下载好的 ttf 格式字体放入项目下文件夹: 样式文件中增加配置:(main.css) 即可 ...

  6. 【三维重建】Ubuntu20.04进行RealSenseD435环境配置及初步使用

    一.环境配置 github上面的教程:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux ...

  7. k8s中pv和pvc

    转载: https://blog.csdn.net/echizao1839/article/details/125766826

  8. 3月1日至3月2日——数据结构与算法分析阅读笔记,线性表,AI。

    (开头是一些废话啊,最近感觉学习状态不太好,上高数的时候左耳听进去右耳就出来了,有点跟不上,可能是没吃饭的原因,也可能是最近强度有点大了,下午上完课就给自己休息了一下,结果刷手机全是关于AI的内容,谢 ...

  9. 关于windows更新时间,设置更新时间段

    https://jingyan.baidu.com/article/bad08e1eda412f09c85121c6.html https://www.dadighost.com/help/39372 ...

  10. jmeter安装配置

    #前提需要有java的环境变量JAVA_HOME=/usr/local/java#jmeter变量CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/t ...