-
Notifications
You must be signed in to change notification settings - Fork 3
Unity Net
#Unity-Net 网络层
http://www.cnblogs.com/sunev/archive/2012/08/07/2625688.html
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28765492&id=3793532
http://blog.zhukunqian.com/?p=1113
http://www.cnblogs.com/skynet/p/5406495.html
https://github.com/recter/Unity-Net
TCP协议中的三次握手和四次挥手(图解)
http://blog.csdn.net/whuslei/article/details/6667471/
TCP服务器是否需要心跳包?
http://zhanyonhu.blog.163.com/blog/static/16186044201061721257450/
为什么心跳包(HeartBeat)是必须的?
http://www.cnblogs.com/coderzh/p/WhyHeartBeatNeeded.html
C# + Socket断线重连
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28765492&id=3793532
在C#中利用Keep-Alive处理Socket网络异常断开的方法
http://www.cnblogs.com/wzd24/archive/2007/05/22/755050.html
Socket.Receive 方法 (Byte[])
.NET Framework 2.0 其他版本 从绑定的 Socket 套接字接收数据,将数据存入接收缓冲区。 命名空间:System.Net.Sockets 程序集:System(在 system.dll 中) 语法 C#C++VB public int Receive ( byte[] buffer ) J# public int Receive ( byte[] buffer ) JScript public function Receive ( buffer : byte[] ) : int 参数 buffer Byte 类型的数组,它是存储接收到的数据的位置。 返回值 接收到的字节数。 异常 异常类型 条件 ArgumentNullException buffer 为 空引用(在 Visual Basic 中为 Nothing)。 SocketException 试图访问套接字时发生错误。有关更多信息,请参见备注部分。 ObjectDisposedException Socket 已关闭。 SecurityException 调用堆栈中的调用方没有所需的权限。 备注 Receive 方法将数据读入缓冲区参数,并返回成功读取的字节数。从面向连接的套接字和无连接套接字中都可以调用 Receive。 此重载仅要求您提供接收缓冲区。缓冲区偏移量的默认值为 0,缓冲区的默认大小为缓冲区参数的长度,而 SocketFlags 的默认值为 None。 如果您使用的是面向连接的协议,则在调用 Receive 之前,必须调用 Connect 以建立远程主机连接,或者调用 Accept 以接受传入的连接。Receive 方法只读取在 Connect 或 Accept 方法中建立的远程主机发送的数据。如果当前使用的是无连接协议,则还可以使用 ReceiveFrom 方法。ReceiveFrom 将允许您接收来自任何主机的数据。 如果没有可读取的数据,则 Receive 方法将一直处于阻止状态,直到数据可用,除非使用 Socket.ReceiveTimeout 设置了超时值。如果超过超时值,Receive 调用将引发 SocketException。如果您处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。您可以使用 Available 属性确定是否有数据可以读取。如果 Available 为非零,请重试接收操作。 如果当前使用的是面向连接的 Socket,那么 Receive 方法将会读取所有可用的数据,直到达到缓冲区的大小为止。如果远程主机使用 Shutdown 方法关闭了 Socket 连接,并且所有可用数据均已收到,则 Receive 方法将立即完成并返回零字节。 如果您使用的是无连接 Socket,则 Receive 将从您在 Connect 方法中指定的目标地址处读取第一个排队的数据报。如果您接收到的数据报大于 buffer 参数的大小,则 buffer 将用消息的第一部分填充,多余的数据都会丢失,并且会引发 SocketException。 Note注意 如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。
Socket.Available 属性
.NET Framework 2.0 其他版本 获取已经从网络接收且可供读取的数据量。 命名空间:System.Net.Sockets 程序集:System(在 system.dll 中) 语法 C#C++VB public int Available { get; } J# /** @property */ public int get_Available ()
JScript public function get Available () : int
属性值 从网络接收的、可供读取的数据的字节数。 异常 异常类型 条件 SocketException 试图访问套接字时发生错误。有关更多信息,请参见备注部分。 ObjectDisposedException Socket 已关闭。 备注 如果当前使用的是非阻止 Socket,一种较好的做法是在调用 Receive 之前使用 Available 来确定数据是否排队等待读取。可用的数据即网络缓冲区中排队等待读取的全部数据。如果在网络缓冲区中没有排队的数据,则 Available 返回 0。 如果远程主机处于关机状态或关闭了连接,则 Available 会引发 SocketException。如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。
Socket.Shutdown 方法
.NET Framework 2.0 其他版本 禁用某 Socket 上的发送和接收。 命名空间:System.Net.Sockets 程序集:System(在 system.dll 中) 语法 C#C++VB public void Shutdown ( SocketShutdown how ) J# public void Shutdown ( SocketShutdown how ) JScript public function Shutdown ( how : SocketShutdown ) 参数 how SocketShutdown 值之一,它指定不再允许执行的操作。 异常 异常类型 条件 SocketException 试图访问套接字时发生错误。有关更多信息,请参见备注部分。 ObjectDisposedException Socket 已关闭。 备注 如果当前使用的是面向连接的 Socket,则必须先调用 Shutdown 方法,然后才能关闭 Socket。这可以确保在已连接的套接字关闭之前,已发送和接收该套接字上的所有数据。 调用 Close 方法可释放所有与 Socket 关联的托管资源和非托管资源。在关闭 Socket 后请不要尝试重用它。 下表显示对于 how 参数有效的 SocketShutdown 枚举值。
Socket.Send 方法 (Byte[])
.NET Framework 2.0 其他版本 将数据发送到连接的 Socket。 命名空间:System.Net.Sockets 程序集:System(在 system.dll 中) 语法 C#C++VB public int Send ( byte[] buffer ) J# public int Send ( byte[] buffer ) JScript public function Send ( buffer : byte[] ) : int 参数 buffer Byte 类型的数组,它包含要发送的数据。 返回值 已发送到 Socket 的字节数。 异常 异常类型 条件 ArgumentNullException buffer 为 空引用(在 Visual Basic 中为 Nothing)。 SocketException 试图访问套接字时发生错误。有关更多信息,请参见备注部分。 ObjectDisposedException Socket 已关闭。 备注 Send 将数据同步发送到 Connect 或 Accept 方法中指定的远程主机,并返回成功发送的字节数。Send 对面向连接的协议和无连接协议均适用。 此重载要求一个缓冲区来包含要发送的数据。SocketFlags 的默认值为 0,缓冲区偏移量的默认值为 0,发送字节数的默认值为缓冲区的大小。 如果您使用的是无连接协议,则必须先调用 Connect 才能调用此方法,否则 Send 将引发 SocketException。如果您使用的面向连接的协议,则必须使用 Connect 建立远程主机连接,或者使用 Accept 接受传入的连接。 如果您使用的是无连接协议,并且打算将数据发送到若干不同的主机,则应使用 SendTo 方法。如果不使用 SendTo 方法,则每次调用 Send 之前必须调用 Connect。即使已经用 Connect 建立了默认远程主机,也可以使用 SendTo。通过另外调用 Connect,也可以在调用 Send 之前更改默认远程主机。 如果您使用的是面向连接的协议,则除非使用 Socket.SendTimeout 设置了超时值,否则,Send 将一直处于阻止状态,直到发送完缓冲区中的所有字节。如果超过超时值,Send 调用将引发 SocketException。在非阻止模式下,Send 可能会成功完成,即使它发送的字节数小于缓冲区中的字节数。应由您的应用程序负责跟踪已发送的字节数并重试操作,直到应用程序发送了缓冲区中的字节数为止。不能保证发送的数据会立即出现在网络上。为提高网络效率,基础系统可能会延迟传输,直到收集了足够多的传出数据后才开始发送。Send 方法的成功完成意味着基础系统有空间来缓冲用于网络发送的数据。 Note注意 如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。 Note注意 发送成功完成并不表示数据已成功传递。如果传输系统内没有缓冲区空间可容纳要传输的数据,则发送过程将被阻止,除非套接字已置于非阻止模式。 Note注意 当在应用程序中启用网络跟踪功能后,此成员将输出跟踪信息。有关更多信息,请参见 网络跟踪。 Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台说明: 用此方法发送零长度数据所产生的结果由本机操作系统决定,而不是由 .NET Compact Framework 决定。