GJM: Unity3D基于Socket通讯例子 [转载]
首先创建一个C# 控制台应用程序, 直接服务器端代码丢进去,然后再到Unity 里面建立一个工程,把客户端代码挂到相机上,运行服务端,再运行客户端。 高手勿喷!~!
完全源码已经奉上,大家开始研究吧!! 嘎嘎嘎!
服务端代码:Program.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net.Sockets;
- namespace SoketDemo
- {
- class Program
- {
- // 设置连接端口
- const int portNo = 500;
- static void Main(string[] args)
- {
- // 初始化服务器IP
- System.Net.IPAddress localAdd = System.Net.IPAddress.Parse("127.0.0.1");
- // 创建TCP侦听器
- TcpListener listener = new TcpListener(localAdd, portNo);
- listener.Start();
- // 显示服务器启动信息
- Console.WriteLine("Server is starting...n");
- // 循环接受客户端的连接请求
- while (true)
- {
- ChatClient user = new ChatClient(listener.AcceptTcpClient());
- // 显示连接客户端的IP与端口
- Console.WriteLine(user._clientIP + " is joined...n");
- }
- }
- }
- }
复制代码
服务端代码:ChatClient.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Collections;
- using System.Net.Sockets;
- namespace SoketDemo
- {
- class ChatClient
- {
- public static Hashtable ALLClients = new Hashtable(); // 客户列表
- private TcpClient _client; // 客户端实体
- public string _clientIP; // 客户端IP
- private string _clientNick; // 客户端昵称
- private byte[] data; // 消息数据
- private bool ReceiveNick = true;
- public ChatClient(TcpClient client)
- {
- this._client = client;
- this._clientIP = client.Client.RemoteEndPoint.ToString();
- // 把当前客户端实例添加到客户列表当中
- ALLClients.Add(this._clientIP, this);
- data = new byte[this._client.ReceiveBufferSize];
- // 从服务端获取消息
- client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);
- }
- // 从客戶端获取消息
- public void ReceiveMessage(IAsyncResult ar)
- {
- int bytesRead;
- try
- {
- lock (this._client.GetStream())
- {
- bytesRead = this._client.GetStream().EndRead(ar);
- }
- if (bytesRead < 1)
- {
- ALLClients.Remove(this._clientIP);
- Broadcast(this._clientNick + " has left the chat");
- return;
- }
- else
- {
- string messageReceived = System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);
- if (ReceiveNick)
- {
- this._clientNick = messageReceived;
- Broadcast(this._clientNick + " has joined the chat.");
- //this.sendMessage("hello");
- ReceiveNick = false;
- }
- else
- {
- Broadcast(this._clientNick + ">" + messageReceived);
- }
- }
- lock (this._client.GetStream())
- {
- this._client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);
- }
- }
- catch (Exception ex)
- {
- ALLClients.Remove(this._clientIP);
- Broadcast(this._clientNick + " has left the chat.");
- }
- }
- // 向客戶端发送消息
- public void sendMessage(string message)
- {
- try
- {
- System.Net.Sockets.NetworkStream ns;
- lock (this._client.GetStream())
- {
- ns = this._client.GetStream();
- }
- // 对信息进行编码
- byte[] bytesToSend = System.Text.Encoding.ASCII.GetBytes(message);
- ns.Write(bytesToSend, 0, bytesToSend.Length);
- ns.Flush();
- }
- catch (Exception ex)
- {
- }
- }
- // 向客户端广播消息
- public void Broadcast(string message)
- {
- Console.WriteLine(message);
- foreach (DictionaryEntry c in ALLClients)
- {
- ((ChatClient)(c.Value)).sendMessage(message + Environment.NewLine);
- }
- }
- }
- }
复制代码
客户端代码 :ClientHandler
- using UnityEngine;
- using System.Collections;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Text;
- using System.Net.Sockets;
- public class ClientHandler : MonoBehaviour
- {
- const int portNo = 500;
- private TcpClient _client;
- byte[] data;
- public string nickName = "";
- public string message = "";
- public string sendMsg = "";
- void OnGUI()
- {
- nickName = GUI.TextField(new Rect(10, 10, 100, 20), nickName);
- message = GUI.TextArea(new Rect(10, 40, 300, 200), message);
- sendMsg = GUI.TextField(new Rect(10, 250, 210, 20), sendMsg);
- if (GUI.Button(new Rect(120, 10, 80, 20), "Connect"))
- {
- //Debug.Log("hello");
- this._client = new TcpClient();
- this._client.Connect("127.0.0.1", portNo);
- data = new byte[this._client.ReceiveBufferSize];
- //SendMessage(txtNick.Text);
- SendMessage(nickName);
- this._client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);
- };
- if (GUI.Button(new Rect(230, 250, 80, 20), "Send"))
- {
- SendMessage(sendMsg);
- sendMsg = "";
- };
- }
- public void SendMessage(string message)
- {
- try
- {
- NetworkStream ns = this._client.GetStream();
- byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
- ns.Write(data, 0, data.Length);
- ns.Flush();
- }
- catch (Exception ex)
- {
- //MessageBox.Show(ex.ToString());
- }
- }
- public void ReceiveMessage(IAsyncResult ar)
- {
- try
- {
- int bytesRead;
- bytesRead = this._client.GetStream().EndRead(ar);
- if (bytesRead < 1)
- {
- return;
- }
- else
- {
- Debug.Log(System.Text.Encoding.ASCII.GetString(data, 0, bytesRead));
- message += System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);
- }
- this._client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);
- }
- catch (Exception ex)
- {
- }
- }
- }
原 帖 地址 http://www.u3dchina.com/forum.php?mod=viewthread&tid=4741&extra=page%3D1%26filter%3Dsortid%26sortid%3D14%26sortid%3D14
如有版权问题 请联系我:993056011@qq.com
转载于:https://www.cnblogs.com/TDou/p/6068812.html
GJM: Unity3D基于Socket通讯例子 [转载]相关推荐
- 全网最全的Java Socket通讯例子
一.前言 Socket通讯在银行.图书馆,物联网应用较多,日常都是Http/Https居多.网上关于Java的比较完整的Socket编程例子屈指可数,参考价值不大.要么是短连接且只支持纯文本通讯:要么 ...
- Unity3d网络游戏Socket通讯
网络游戏是一种人们娱乐休闲互交的应用软件.既然是互交,当然需要彼此间的了解通讯.要通讯那必须需要Socket:我们今天要实现的主角即套接字.Socket的英文原义是"孔"或&quo ...
- 魔坊APP项目-16-种植园、websocket协议、服务端基于socket提供服务(基于房间管理分发信息)、种植园页面展示
种植园 我们需要完成的种植园,是一个互动频繁,并且要求有一定即时性的模块,所以如果继续基于http协议开发,那么需要通过ajax发送大量http请求,同时因为http本身属于单向通讯,所以服务端无法主 ...
- C#基于Socket的CS模式的完整例子
基于Socket服务器端实现本例主要是建立多客户端与服务器之间的数据传输,首先设计服务器.打开VS2008,在D:\C#\ch17目录下建立名为SocketServer的Windows应用程序.打开工 ...
- ios视频通话三方_iOS基于Socket.io即时通讯IM实现,WebRTC实现视频通话
Socket.io-FLSocketIM-iOS 基于Socket.io iOS即时通讯客户端 iOS IM Client based on Socket.io 实现功能 文本发送 图片发送(从相册选 ...
- 基于TCP的Socket通讯
基于 TCP 的 Socket 通讯 最近要实现两个机器之间基于 TCP 的 socket 通讯(个人使用 Python 实现),尝试了官方的 demo 代码后总是被拒绝连接,仔细研究了一下并成功建立 ...
- QT示例:基于TCP 点对多Socket通讯(server,clients)
QT示例:基于TCP 点对多通讯(server,clients) 一.服务器server 二.客户端Client 下载:基于TCP 点对多Socket通讯 一.服务器server 因为对于客户端来说, ...
- php cannot bind port to socket,PHP基于socket实现客户端和服务端通讯功能
本文主要介绍了PHP基于socket实现的简单客户端和服务端通讯功能,可实现服务端接收客户端发送的字符串进行翻转操作后返回客户端的功能,需要的朋友可以参考下 服务端: set_time_limit(0 ...
- 基于Socket实现客户端与服务端通讯
基于Socket实现客户端与服务端通讯 socket 概述 Socket,套接字就是两台主机之间逻辑连接的端点.TCP/IP协议是传输层协议,主要解决数据如何 在网络中传输,而HTTP是应用层协议,主 ...
最新文章
- OpenCV(十五)边缘检测1 -- Sobel算子(一阶微分算子,X、Y方向边缘检测)
- 400全集python全套视频教程-千锋出品全套python视频教程,400大全集,你了解吗?...
- 11.使用ForwardAction实现页面屏蔽。
- Socket套接字 =======================
- 使用Canal实现redis和mysql的同步
- 三星Galaxy Fold 2渲染图曝光:怎么折是个问题
- 使用php简单网页抓取和内容分析,使用PHP简单网页抓取和内容分析_php
- 手机可用熵_时间之矢,生命之熵
- javaweb——EL表达式和JSTL
- linux命令和常见的状态码
- Windows Pygame 安装教程 (自己识别版本号并下载)
- 如何下载centos7的iso文件
- 钉钉和mis系统对接调研
- php获取steam装备信息,api – 获取某人的Steam库存
- Win10企业版系统安装 NET Framework 4.8的时候提示错误信息
- 12.寻光集后台管理系统-库存信息(后端)
- c语言程序 出圈游戏,【出圈】 (C语言代码)
- 2021-12-19 老杨博客推荐\TCP像串口的多程编写的一个弱鸡版本类MQTT的TCP实现\字典值查键\微PYTHON与PYTHON的JSON区别\以及一个ESP32领导多个ESP8266组网模式
- 一个注册、登陆系统的实现
- 56网首发2012APEC青创会主题微电影
热门文章
- UESTC 288 青蛙的约会 扩展GCD
- [恢]hdu 1850
- 原来AI可以这样学?让人欲罢不能的AI学习神器!
- 鲁汶大学提出可端到端学习的车道线检测算法
- AdvancedEAST高效场景文本检测(附Github地址)
- 【Java进阶营】Java多线程基础学习(一)
- java sequencefile_Hadoop SequenceFile数据结构介绍及读写
- 收藏 | 可能是最详尽的PyTorch动态图解析
- 收藏 | 机器学习特征选择方法总结
- 【资源下载】512页IBM沃森研究员Charu最新2018著作《神经网络与深度学习》(附下载链接)