Unity Socket TCP
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System;
using System.Threading; namespace HelloSocket
{
/// <summary>
///配置信息
/// </summary>
/// ip地址 端口 类型:TCP/UDP
class HelloAddress
{
private static string host ="127.0.0.1";
private static int port = 5055;
private static IPAddress ip = IPAddress.Parse(host);
public static IPEndPoint IPEP = new IPEndPoint(ip, port);
public static Socket hSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ///<summary>
///修改配置信息
///</summary>
///ip地址 端口 类型:TCP/UDP
public static void SetHelloAddress(string ipStr, int iPort, System.Net.Sockets.ProtocolType type)
{
host = ipStr;
port = iPort;
ip = IPAddress.Parse(host);
IPEP = new IPEndPoint(ip, port);
hSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, type);
}
} ///<summary>
///客户端
///</summary>
/// API
class HelloClient : HelloAddress
{
///<summary>
///连接服务端
///</summary>
public static void Main()
{
try
{
hSocket.Connect(IPEP);
Thread threadConnect = new Thread(new ThreadStart(ReceiveMessage));
threadConnect.Start();
}
catch (ArgumentNullException e)
{
Debug.Log(e.ToString());
}
catch (SocketException e)
{
Debug.Log(e.ToString());
}
} ///<summary>
///发送信息
///</summary>
public static void SendMessage(string sendStr)
{
//确定是否连接
if (hSocket.Connected)
{
IPEndPoint ipe = (IPEndPoint)hSocket.RemoteEndPoint;
sendStr = ipe.ToString() + sendStr;
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
hSocket.Send(bs, bs.Length, 0);
}
} ///<summary>
///接收信息
///</summary>
private static void ReceiveMessage()
{
while (true)
{
byte[] recvBytes = new byte[1024];
int iBytes = hSocket.Receive(recvBytes, recvBytes.Length, 0);
if (iBytes <= 0)
{
break;
}
string recvStr = "";
recvStr+=Encoding.ASCII.GetString(recvBytes,0,iBytes);
Debug.Log("服务端返回的数据:" + recvStr);
}
}
///<summary>
///关闭套接字
///<summary>
public static void Close()
{
hSocket.Close();
}
} ///<summary>
///服务端
///</summary>
/// API
class HelloServer : HelloAddress
{
//存储连接服务端的所有用户
public static List<Socket> listPlayer = new List<Socket>();
private static Socket sTemp;
///<summary>
///服务端 绑定地址并监听
///</summary>
public static void Main()
{
try
{
Thread threadListenAccept = new Thread(new ThreadStart(ListenAccept));
threadListenAccept.Start();
}
catch (ArgumentNullException e)
{
Debug.Log(e.ToString());
}
catch (SocketException e)
{
Debug.Log(e.ToString());
}
} ///<summary>
///监听用户连接
///</summary>
private static void ListenAccept()
{
hSocket.Bind(IPEP);
hSocket.Listen(0);
sTemp = hSocket.Accept();
listPlayer.Add(sTemp);
Thread threadReceiveMessage = new Thread(new ThreadStart(ReceiveMessage));
threadReceiveMessage.Start();
while (true)
{
sTemp = hSocket.Accept();
listPlayer.Add(sTemp);
}
}
///<summary>
///接收信息
///<summary>
private static void ReceiveMessage()
{
while (true)
{
byte[] recvBytes = new byte[1024];
int iBytes =sTemp.Receive(recvBytes, recvBytes.Length, 0);
if (iBytes <= 0)
{
break;
}
string recvStr = "";
recvStr += Encoding.ASCII.GetString(recvBytes, 0, iBytes);
Debug.Log("客户端获取的数据:" + recvStr);
}
}
///<summary>
///发送信息
///</summary>
public static void SendMessage(string sendStr)
{
IPEndPoint ipe = (IPEndPoint)sTemp.RemoteEndPoint;
sendStr = ipe.ToString() + sendStr;
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
sTemp.Send(bs, bs.Length, 0);
}
///<summary>
///关闭套接字
///</summary>
public static void Close()
{
for (int i = 0; i < listPlayer.Count; i++)
{
listPlayer[i].Close();
}
sTemp.Close();
hSocket.Close();
}
} }
Unity Socket TCP的更多相关文章
- unity Socket TCP连接案例(一)
非常清晰的demo 服务端 using System; using System.Collections; using System.Collections.Generic; using System ...
- 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...
- 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载
一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用 ...
- 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP
[源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...
- 关于socket tcp 断线重连
这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...
- ActionScript简单实现Socket Tcp应用协议分析器
转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...
- 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室
原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...
- 基于.NET Socket Tcp的发布-订阅框架
基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已 ...
- 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...
随机推荐
- SQLite 运算符(http://www.w3cschool.cc/sqlite/sqlite-operators.html)
SQLite 运算符 SQLite 运算符是什么? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算. 运算符用于指定 SQLite 语句中的条件 ...
- 10 GridView 样式属性
GridView 样式属性: 1,android:numColumns="auto_fit" 显示的列数 如果android:numColumns不设置那么自动每行1列 如下图 2 ...
- JAVA面向对象-----java面向对象的六大原则
现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种 种问题,导致尽管是面向对象的语言,却是面向过程的逻辑 ...
- 【移动开发】AIDL中callback的实现
AIDL实现就可以在客户端中调用服务端的方法,并传递数据到服务端,也可以服务端传递数据过来:但是如果要从服务端去调用客户端的方法,那么就需要注册callback! 抄自和源码:http://zxl-o ...
- Android四大组件之一Service介绍-android学习之旅(十二)
基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52138483 Hook机制中Binder代理类关系图 Hook机制中Binder代理时 ...
- 【原创】Nginx+PHP-FPM优化技巧总结
php-fpm的安装很简单,参见PHP(PHP-FPM)手动编译安装.下面主要讨论下如何提高Nginx+Php-fpm的性能. 1.Unix域Socket通信 之前简单介绍过Unix Domain S ...
- Spark 1.0 开发环境构建:maven/sbt/idea
因为我原来对maven和sbt都不熟悉,因此使用两种方法都编译了一下.下面记录一下编译时候遇到的问题.然后介绍一下如果使用IntelliJ IDEA 13.1构建开发环境. 首先准备java环境和sc ...
- 【一天一道LeetCode】#137. Single Number II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- SQL 2012 Always On 为 MSCRMSqlClrLogin SQL 登录名创建非对称密钥时报语法错误
根据实施手册中的下图的SQL在为MSCRMSqlClrLogin 创建非对称秘钥时报语法错误,具体的错误在就path那,调了多次还是报错,索性就把SQL拆开执行. 先执行这条 SELECT * FRO ...