广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >unity使用socket编程实现聊天室功能
  • 110
分享到

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

2024-04-02 19:04:59 110人浏览 薄情痞子
摘要

本文实例为大家分享了Unity使用Socket实现聊天室功能的具体代码,供大家参考,具体内容如下 示例: 什么是Socket: Socket(套接字),用来描述IP地址和端口,是通

本文实例为大家分享了Unity使用Socket实现聊天室功能的具体代码,供大家参考,具体内容如下

示例:

什么是Socket:

Socket(套接字),用来描述IP地址和端口,是通信链的句柄,应用程序可以通过Socket向网络发送请求或者应答网络请求!Socket是支撑tcp/IP协议的网络通信的基本操作单元,是对网络通信过程中端点的抽象表示,包含了进行网络通信所必须的五种信息:连接使用的协议,本地主机的IP地址,本地远程的协议端口,远地主机的IP地址,远地进程的协议端口。

通信模型:

服务端实现连接的步骤

1.创建Socket,绑定IP和端口。

2.调用Accept()监听客户端请求。

3.简历连接后,通过输入流读取客户端发送的请求。

4.通过输出流向客户端发送信息。

5.关闭相关资源。

客户端实现连接的步骤

1.创建Socket,指明需要连接的服务器地址和端口号。

2.建立连接后向服务器发送请求。

3.相应服务器信息。

4.关闭相关资源。

基本操作:


public Socket (System.net.Sockets.AddressFamily addressFamily, 
               System.Net.Sockets.SocketType socketType,
               System.Net.Sockets.ProtocolType protocolType);

创建一个Socket调用他的构造函数;

addressFamily参数指定类使用的寻址方案Socket

socketType参数指定类的类型 Socket

protocolType 参数指定所使用的协议Socket

这三个参数不是独立的。 某些地址族限制可与它们一起使用的协议,而类型通常Socket是协议中的隐式。 如果地址族、 Socket类型和协议类型的组合导致无效 Socket ,则此构造函数会引发 SocketException。

Bind()

如果需要使用特定的本地终结点,请使用方法。 必须先调用, Bind然后才能调用Listen()方法。

在调用之前 ,必须先创建 IPEndPoint 用于与数据通信的本地。

Listen()Connect()

将Socket置于侦听状态。Listen导致面向连接的Socket监听传入的连接尝试。 backlog参数指定可以排队等待接受的传入连接的数量。

Connect与远程主机建立连接。

Accept()

为新建连接创建新的Socket。Accept从侦听套接字的连接请求队列中同步提取第一个挂起的连接请求,然后创建并返回一个新的Socket。

Receive()

接收来自绑定的Socket的数据。Receive方法将数据读入 buffer 参数,并返回成功读取的字节数。

Send()

将数据发送到连接的Socket。​​​​​​​Send将数据同步发送到或方法中指定的远程主机并返回成功发送的字节数。

Poll()

确定 ​​​​​​​Socket 的状态。microSeconds等待响应的时间(以微秒为单位)。基于 mode 参数中传递的轮询模式值的 Socket 的状态。

Close()

关闭 ​​​​​​​Socket 连接并释放所有关联的资源。

使用Socket创建一个简单的聊天室

服务端

写了一控制台应用,也可以移植到其他平台。


using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
 
namespace MyServer
{
    class Client
    {
        private Socket clientSocket;
        private Thread t;
        private byte[] data = new byte[1024];
        public Client(Socket s)
        {
            clientSocket = s;
            //启动一个线程接受数据;
            t = new Thread(ReceiveMessage);
            t.Start();
 
        }
        private 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);
                //接受到数据要分发到客户端
                Console.WriteLine("收到:" + message);
                Program.BroadcastMessage(message);
            }
        }
        public void SendMessage(string message)
        {
            byte[] data = Encoding.UTF8.GetBytes(message);
            clientSocket.Send(data);
        }
        public bool Connected
        {
            get { return clientSocket.Connected; }
        }
    }
 
 
    class Program
    {
        //存储每一个客户端
        static List<Client> clientList = new List<Client>();
 
        /// <summary>
        /// 服务器广播这个消息
        /// </summary>
        /// <param name="message"></param>
        public static void BroadcastMessage(string message)
        {
            var notConnectedList = new List<Client>();
 
            foreach (var client in clientList)
            {
                if (client.Connected)
                    client.SendMessage(message);
                else
                    notConnectedList.Add(client);
            }
            foreach (var item in notConnectedList)
            {
                clientList.Remove(item);
            }
        }
 
        static void Main(string[] args)
        {
 
 
            Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //192.168.xx.xxx
            tcpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.xx.xxx"), 7788));
            tcpServer.Listen(100);
 
            Console.WriteLine("服务器启动成功");
 
            while (true)
            {
                Socket clientSocket = tcpServer.Accept();
                Console.WriteLine("有一个客户端连过来了");
                Client client = new Client(clientSocket);//收发消息放到Client类中处理
                clientList.Add(client);
            }
 
 
        }
    }
}

客户端

使用Unity编写的客户端


using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;
using System.Net;
using UnityEngine.UI;
using System.Text;
using System.Threading;
 
public class MyClient : MonoBehaviour
{
    public string ipaddress = "192.168.xx.xxx";
    public int port=7788;
 
    private Socket clientSocket;
 
    private Thread t;
 
    private byte[] data = new byte[1024];
    public InputField inputField;
    public Text chat;
    public InputField myName;
    public string message = "";
    void Start()
    {
        ConnectToServer();
    }
    private void Update()
    {
        if (message != null && message !="")
        {
            chat.text += "\n" + message;
            message = "";
        }
    }
    private void ConnectToServer()
    {
        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //发起连接
        clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress), port));
        //创建一个新的线程接受消息
        t = new Thread(ReceiveMessage);
        t.Start();
 
    }
   //循环接受消息
    void ReceiveMessage()
    {
 
        while (true)
        {
            if (clientSocket.Connected == false)
                break;
            int length = clientSocket.Receive(data);
 
            message = Encoding.UTF8.GetString(data, 0, length);
 
          //  chat.text += "\n" + message;
        }
      
    }
    void SendMessages(string message)
    {
        byte[] data = Encoding.UTF8.GetBytes(message);
        clientSocket.Send(data);
    }
 
    public void OnSendButtonClick()
    {
        string value = myName.text+":"+ inputField.text;
        SendMessages(value);
        inputField.text = "";
    }
 
    private void OnDestroy()
    {
        t.Abort();
        clientSocket.Shutdown(SocketShutdown.Both);//既不接受也不发送
        clientSocket.Close();//关闭连接
    }
}

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

--结束END--

本文标题: unity使用socket编程实现聊天室功能

本文链接: https://www.lsjlt.com/news/157485.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • unity使用socket编程实现聊天室功能
    本文实例为大家分享了unity使用socket实现聊天室功能的具体代码,供大家参考,具体内容如下 示例: 什么是Socket: Socket(套接字),用来描述IP地址和端口,是通...
    99+
    2022-11-12
  • unity使用socket实现聊天室功能
    本文实例为大家分享了unity使用socket实现聊天室的具体代码,供大家参考,具体内容如下 unity聊天室服务端实现 using System; using System.C...
    99+
    2022-11-11
  • Unity实现聊天室功能
    本文实例为大家分享了Unity实现聊天室功能的具体代码,供大家参考,具体内容如下 简单聊天室功能,客户端发送消息后,服务器接收到消息后分发到其它客户端上并显示聊天内容 聊天室服务器 ...
    99+
    2022-11-11
  • C++基于socket编程实现聊天室功能
    本文实例为大家分享了C++基于socket编程实现聊天室的具体代码,供大家参考,具体内容如下 服务端 // server.cpp : 此文件包含 "main" 函数。程序执行将在...
    99+
    2022-11-12
  • android socket聊天室功能实现
    前提概要 笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对...
    99+
    2022-06-06
    socket Android
  • Java Socket实现聊天室功能
    本文实例为大家分享了Java Socket实现聊天室的具体代码,供大家参考,具体内容如下 1 创建登录判断类UserLogin import java.util.HashSet; i...
    99+
    2022-11-13
  • Unity如何实现聊天室功能
    这篇文章给大家分享的是有关Unity如何实现聊天室功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。聊天室服务器服务器需要有以下几个步骤确定Socket协议类型(采用TCP协议或者UDP协议)2、绑定服务器的IP...
    99+
    2023-06-08
  • Unity实现局域网聊天室功能
    基于Unity实现一个简单的局域网聊天室,供大家参考,具体内容如下 学习Unity有一点时间了,之前学的都是做客户端的一些内容,现在开始学习联网。我的这个是在观看了 Siki 的教学...
    99+
    2022-11-12
  • 使用socket实现网络聊天室和私聊功能
    使用socket技术实现网络聊天室和私聊功能,具体内容如下话不多说先上图:聊天室群聊页面在线用户的联系人列表socket连接页面私聊页面项目介绍与服务端实现socket连接:每个客户端连接到服务器的时候,服务器会将每个连接的socket保存...
    99+
    2023-05-30
    socket 聊天室 私聊
  • node+socket实现简易聊天室功能
    本文实例为大家分享了node+socket实现简易聊天室的具体代码,供大家参考,具体内容如下 服务端 const net = require('net') const serv...
    99+
    2022-11-12
  • Java聊天室之使用Socket实现通信功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:使用套接字实现了服务器端与客户端的通信。 运行程序,在服务器端的文本框中输入信息,然后按回车键,客户端就会收到服务器端...
    99+
    2022-11-13
    Java实现聊天室 Java聊天室 Java Socket 通信
  • Java聊天室之实现获取Socket功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:获取远程服务器和客户机的IP地址和端口号。 二、解题思路 创建一个服务器类:ServerSocketFrame,继承J...
    99+
    2022-11-13
    Java实现聊天室 Java聊天室 Java 获取Socket
  • Java Socket+多线程实现多人聊天室功能
    本文实例为大家分享了Java Socket+多线程实现多人聊天室的具体代码,供大家参考,具体内容如下 思路简介 分为客户端和服务器两个类,所有的客户端将聊的内容发送给服务器,服务器接...
    99+
    2022-11-12
  • C#基于Socket实现简单聊天室功能
    因为这段时间在学习Socket,所以就试着写了一个简单的聊天室。主要分为服务器端和多个客户端。利用服务器端作数据中转站,实现消息群发。 1、服务器端有两个类: using Syste...
    99+
    2022-11-13
  • C++基于socket UDP网络编程实现简单聊天室功能
    本文实例为大家分享了C++基于socket UDP实现简单聊天室功能的具体代码,供大家参考,具体内容如下 0.通信步骤流程图 (左:服务器;右:客户端;) 1.服务器代码 1.1服...
    99+
    2022-11-12
  • C++基于socket UDP网络编程如何实现聊天室功能
    这篇文章主要介绍C++基于socket UDP网络编程如何实现聊天室功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下0.通信步骤流程图(左:服务器;右:客户端;)1.服务器代码1.1服务器类头文件(CS...
    99+
    2023-06-20
  • 怎么用Java Socket+多线程实现多人聊天室功能
    这篇文章主要讲解了“怎么用Java Socket+多线程实现多人聊天室功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java Socket+多线程实现多人聊天室功能”吧!思路简介分...
    99+
    2023-06-20
  • Java聊天室之实现聊天室服务端功能
    目录一、题目描述二、解题思路三、代码详解多学一个知识点一、题目描述 题目实现:实现聊天室服务器端功能。运行程序,服务端等待客户端连接,并显示客户端的连接信息。 二、解题思路 创建一个...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 服务端
  • Java聊天室之实现聊天室客户端功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:实现聊天室客户端。运行程序,用户登录服务器后,可以从用户列表中选择单个用户进行聊天,也可以选择多个用户进行聊天。 二、...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 客户端
  • C#使用WebSocket实现聊天室功能
    WebSocket介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 在WebSocket API中,浏览器和服务器只需要做一个握手的动作...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作