使用Socket的Demo
分析:
聊天室:
①客户端:UI界面、网络收发I/O
②服务器端:
网络收发I/O:
创建Socket对象->将Socket对象和电脑的应用进行一个绑定->等待连接,连接成功就建立交流的通道
(1)创建Socket对象
Socket tcpServer = new Socket();
进行初始化的构造函数的重载有三个:
只有一个参数,参数类型为SocketInformation
查看SocketInformation这个东西,转到定义的地方
namespace System.Net.Sockets {
//
// 摘要:
// 是复制所需的信息进行封装 System.Net.Sockets.Socket。
public struct SocketInformation {
//
// 摘要:
// 获取或设置的协议信息 System.Net.Sockets.Socket。
//
// 返回结果:
// System.Byte 类型的数组。
public byte[] ProtocolInformation
{
get;
set;
}
//
// 摘要:
// 获取或设置的选项 System.Net.Sockets.Socket。
//
// 返回结果:
// 一个 System.Net.Sockets.SocketInformationOptions 实例。
public SocketInformationOptions Options
{
get;
set;
}
}
}
SocketInformation为一个结构体,并只含有两个属性
类型为byte[] ProtocolInformation用于获取或设置协议信息
类型为SocketInformationOptions Options,跳转到SocketInformations(套接字信息选项)的定义为枚举类型,用来标记Socket的状态:
值有:NonBlocking=1, socket 被阻止
Connected=2, socket连接
Listening=4, 侦听新连接
UseOnlyOverlappedIO=8,使用重叠的I/O
SocketType,也为枚举类型,总共有五个值
Unknown=-1,指定未知Socket类型
Stream=1,支持可靠、双向、基于连接的字节流
Dgram=2,数据报形式,固定的最大值
Raw=3,支持访问基础传输协议
Rdm=4,支持无连接,面向消息的、可靠地发送的消息
Seqpacket,排序的字节流的面向连接和可靠的双向传输
AddressFamily ,枚举值,用来表示我这个Socket即将要连接到那种IP地址
namespace System.Net.Sockets {
//
// 摘要:
// 指定的寻址方案的一个实例 System.Net.Sockets.Socket 类可以使用。
public enum AddressFamily {
//
// 摘要:
// 未知的地址族。
Unknown = -1,
//
// 摘要:
// 未指定的地址族。
Unspecified = 0,
//
// 摘要:
// Unix 本地主机地址。
Unix = 1,
//
// 摘要:
// IP 版本 4 地址。
InterNetwork = 2,
//
// 摘要:
// 当初 ARPANET 导入地址。
ImpLink = 3,
//
// 摘要:
// PUP 协议的地址。
Pup = 4,
//
// 摘要:
// MIT 混乱不堪的局面协议的地址。
Chaos = 5,
//
// 摘要:
// Xerox NS 协议的地址。
NS = 6,
//
// 摘要:
// IPX 或 SPX 地址。
Ipx = 6,
//
// 摘要:
// 对 ISO 协议的地址。
Iso = 7,
//
// 摘要:
// OSI 协议的地址。
Osi = 7