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 = ; 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");
}
}
}

代码二:

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

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 = ;
private TcpClient _client;
byte[] data; public string nickName = "";
public string message = "";
public string sendMsg = ""; void OnGUI()
{
nickName = GUI.TextField(new Rect(, , , ), nickName);
message = GUI.TextArea(new Rect(, , , ), message);
sendMsg = GUI.TextField(new Rect(, , , ), sendMsg); if (GUI.Button(new Rect(, , , ), "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, , System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null);
}; if (GUI.Button(new Rect(, , , ), "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, , 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 < )
{
return;
}
else
{ Debug.Log(System.Text.Encoding.ASCII.GetString(data, , bytesRead)); message += System.Text.Encoding.ASCII.GetString(data, , bytesRead);
} this._client.GetStream().BeginRead(data, , System.Convert.ToInt32(this._client.ReceiveBufferSize), ReceiveMessage, null); }
catch (Exception ex)
{ }
}
}

这样就得了。

Unity3d简单的socket通信的更多相关文章

  1. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  2. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  3. Android简单实现Socket通信,client连接server后,server向client发送文字数据

    案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...

  4. 简单的Socket通信

    Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 服务端步骤: • socket:创建服务器socket ...

  5. Day 6-2简单的socket通信

    什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面 ...

  6. Java实现简单的socket通信

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

  7. C#版 Socket编程(最简单的Socket通信功能)

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

  8. Java 实现简单的 Socket 通信

    Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层.本文介绍了 Java socket 简单用法. 1. 传输层协议 传输层包含了两种协议,分别是 TCP (T ...

  9. 简单的Socket通信(简单的在线聊天)---winform

    注:本博客适合刚开始学习winform程序的初学者,大牛请绕道(跪求大牛指导文中不足) .....10w字废话自动省略,直接开始正题. 首先从最基本的建立winform开始(本项目用的Vs2017) ...

随机推荐

  1. LinkCode 第k个排列

    http://www.lintcode.com/zh-cn/problem/permutation-sequence/# 原题 给定 n 和 k,求123..n组成的排列中的第 k 个排列. 注意事项 ...

  2. 学好php可以做的事情真多!

    学好php能做什么?其实学好php能做的事情很多! 一. 学好php可以就业 1:大中小公司通吃. 现在几乎所有有前途的公司都会在互联网上安家.只要在网上安家,就需要找这些方面的技术人员,而且很多公司 ...

  3. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

  4. NancyFx 2.0的开源框架的使用-Stateless

    同样和前面一样新建一个空的Web项目,都在根目录添加Module,Models,Views文件夹 添加Nuget包 在Models文件夹里面添加UserModel类 public string Use ...

  5. 深入浅出SOA

    前一阵换了份工作,来到新公司,恰好新同事问起SOA是什么,我随口说了几点,其实自己以前研究过,不过并没有详细的整理过,说的比较模糊,恰好周末,拿出点时间整理下以前对SOA的认知. SOA是什么?SOA ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6812311.html 1.对原生态jdbc程序中问题总结 1.1 jdbc程序 需求:使用jdbc查询mys ...

  7. python 分片

    有些书中叫做分片,有些书中叫做切片,翻译时的一些误差) 概念:将序列按段进行切割 作用:通过分片操作符来访问一定范围内的元素 实现:分片是通过两个冒号相隔的索引来实现 范围:符合序列特性即可使用切片功 ...

  8. AngularJS操作DOM——angular.element

    addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元素里面的末尾处插入参数内容a ...

  9. 超声波 HC-SR04

    三.实验原理 1. 超声波传感器简介 超声波测距系统主要应用于汽车的倒车雷达.及机器人自动避障行走.建筑施工工地以及一些工业现场例如:液位.井深.管道长度等场合.超声波是一种在弹性介质中的机械振荡,有 ...

  10. Spring MVC和Struts2的比较

    Spring MVC PK Struts2 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置.spring3 mvc可以认为已经100%零配置了(除了配置spring mvc ...