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的更多相关文章

  1. unity Socket TCP连接案例(一)

    非常清晰的demo 服务端 using System; using System.Collections; using System.Collections.Generic; using System ...

  2. 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载

    一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...

  3. 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

    一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用 ...

  4. 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP

    [源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...

  5. 关于socket tcp 断线重连

    这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...

  6. ActionScript简单实现Socket Tcp应用协议分析器

    转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...

  7. 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

    原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  8. 基于.NET Socket Tcp的发布-订阅框架

    基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已 ...

  9. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

随机推荐

  1. Java学习之二维数组定义与内存分配详解

    二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的元素有多少个. 注意: ...

  2. 指令汇B新闻客户端开发(一) 新手引导页开发

    首先做开发的时候应该有一个闪屏页面和新手引导页, 我相信闪屏页面大家应该都会了,那么先看到新手引导页了. 我们可以看到这其实是一个ViewPager,我们也可以看到这是3个引导页,那么首先来看一下布局 ...

  3. 在github上最热门好评高的ROS相关功能包

    在github上最热门最受欢迎的ROS相关功能包 下面依次列出,排名不分先后: 1  Simulation Tools In ROS https://github.com/ros-simulation ...

  4. Dynamics Crm 2011 Or 2013 IFD 部署一段时间后,CA验证问题

    以下错误描述摘自博客:http://blog.csdn.net/qzw4549689/article/details/14451257 IFD部署一段时间后,大概一年,突然出现从IFD登录页面登录后, ...

  5. Android简易实战教程--第十三话《短信备份和还原~三》

    之前写过短信备份的小案例,哪里仅仅是虚拟了几条短信信息.本篇封装一个业务类,且直接通过内容提供者,访问本系统的短信信息,再提供对外接口.如果想要短信备份和短信还原,直接复制这段代码即可.对于您调用这个 ...

  6. Android初级教程通过简要分析“土司”源码,来自实现定义土司理论探讨

    由于系统自带的土司瞬间即逝,而且非常难看.因此我们就希望自定义自己的土司风格.有些实例就是基于自定义土司完成的,例如金山卫士的火箭发射,基本原理就是个土司.但是在做出自己的土司风格之前,还是要简要分析 ...

  7. Cocos2D创建多彩文本显示标签

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Cocos2D中默认的CCLableTTF类从源代码里看是支持 ...

  8. Linux 内存管理之highmem简介

    一.Linux内核地址空间 一般来说Linux 内核按照 3:1 的比率来划分虚拟内存(X86等):3 GB 的虚拟内存用于用户空间,1GB 的内存用于内核空间.当然有些体系结构如MIPS使用2:2 ...

  9. 探索Antlr(Antlr 3.0更新版)

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://www.blogbus.com/dreamhead-logs/10756716.html <探索Antlr> ...

  10. (NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖 ...