vs2010或其他创建C#工程

C#端代码一:

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){// 初始化服务器IPSystem.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");}}}

代码二:

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;   // 客户端IPprivate 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);}}}
}

unity端代码,直接挂载到摄像头:

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){}}
}

这样就得了。

转载于:https://www.cnblogs.com/boye666/p/6531276.html

Unity3d简单的socket通信相关推荐

  1. java 通信 教程_Java实现简单的socket通信教程

    今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有pa ...

  2. 简单的socket通信实现

    一.什么是socket网络通信? socket也称作"套接字",描述了计算机的IP地址和端口,运行在计算机中的程序之间采用socket进行数据通信.通信的两端都有socket,它是 ...

  3. Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据

    案例实现的是简单的Socket通信,当客户端(Android客户端)连接到指定服务器以后,服务器向客户端发送一句话文字信息(你可以拓展其它的了) 先看一下服务端程序的实现吧 Server.java i ...

  4. 使用vb.net开发简单的socket通信

    使用vb.net开发简单的socket通信(环境是visual stdio 2019) 说明 参考文章 实现功能 效果展示 代码 服务端 客户端 总结 说明 之前用vb6编程时都是用的winsock控 ...

  5. 使用Petalinux实现ZYNQ的linux程序开发(实现简单的socket通信程序)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 (一)实现功能及开发环境 一.实现功能 二.开发环境 (二)实现步骤 一.开发环境搭建 1.设置Ubuntu 和 Windo ...

  6. socket通信之最简单的socket通信

    http://blog.csdn.net/xluren/article/details/8043484#t15 套接字有三种类型 流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRA ...

  7. c语言实现简单的socket通信

    一.通讯示意图 二.函数详解 1.socket()函数 int socket(int domain, int type, int protocol); socket函数对应于普通文件的打开操作.普通文 ...

  8. windows:简单的socket通信

    目录 说明 效果展示 服务端代码 客户端代码 函数和结构体详情 说明 这个示例是写了一个服务端和一个客户端,客户端发数据,服务器接数据. 服务端地址:10.131.8.185              ...

  9. socket通信 _ 一个简单的群聊系统

    群聊系统要用到通信socket协议,在java中要用到两个类java.net.ServerSocket和 Java.net.Socket.ServerSocket用于创建服务器,而Socket用于创建 ...

最新文章

  1. Java项目:在线水果商城系统(java+JSP+Spring+SpringMVC +MyBatis+html+mysql)
  2. 如何获取URL中的参数
  3. CC++面试题大汇总
  4. jquery的$.extend和$.fn.extend作用及区别(—)
  5. 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!
  6. uniapp同步获取用户信息_表单设计是为了帮助用户获取信息,而不是填写
  7. mysql jdbc 表结构_JDBC操作表:JDBC修改表结构
  8. oSIP开发者手册 (四)
  9. atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php
  10. 无人驾驶路径规划(一)全局路径规划 - RRT算法原理及实现
  11. vscode下载与安装教程
  12. 威纶触摸屏做modbus rtu主站控制风机 ZLAN5143的应用案例
  13. 与iPhone5国行A1429的故事:越狱、降级刷机、完美电信3G、不完美电信4G、撸油管
  14. 微信支付-委托代扣学习资料整理
  15. 解决Chrome浏览器“隐私设置错误,您的链接不是私密连接”
  16. 锂电池电压和容量关系
  17. VSCode 连接 Linux 远程服务器
  18. 记录——python与华为云数据库MYSQL的交互
  19. 时间单位:s cs ms us ns ps fs as zs js ys 普朗克
  20. 15-Puzzle Problem

热门文章

  1. 用ASP实现隐藏链接方法
  2. dos显示磁盘剩余空间
  3. windows 启动某些文件的快捷方式 ”系统环境变量?“
  4. redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?
  5. SpringCloud配置中心高可用搭建
  6. 解决Error: Cannot find module 'node-sass'问题
  7. 心理正常与异常的区分_心理正常与心理异常的区别是什么呢
  8. 电脑显示器变色_流光溢彩电竞出击:飞利浦猛腾M1系列电竞显示器275M1RZ
  9. 重磅|施耐德电气O2O数字化咨询服务强势来袭
  10. 5G与数据中心是新基建“耗电双雄”?事情不能这么看……