使用C#.NET 实现高性能IPX/SPX SOCKET服务器 附源码
2010-01-13 14:47
871 查看
要实现 IPX/SPX 必须自己写IPX地址类
它派生于 EndPoint. 因为.NET没有提供此类所以必须自己写
写好后 初始化SOCKET对象:
sock = new Socket(AddressFamily.Ipx, SocketType.Stream, ProtocolType.Spx);
注意 Addressfamily和protype
初始化地址
IPXEndPoint myEnd = new IPXEndPoint("MAC地址", 节点号, 端口);
sock.Bind(myEnd);
其他的和常规的TCP服务一样..
你可以到我的个人代码上传空间去下载 基于 ZYSocketSuper 扩展的超级 SOCKET IPX/SPX服务器端 模型
http://download.csdn.net/source/1990672
它派生于 EndPoint. 因为.NET没有提供此类所以必须自己写
public class IPXEndPoint : EndPoint { byte[] NetNum; byte[] NodeNum; ushort Prot; public IPXEndPoint(ushort prot) { NetNum = new byte[4]; NodeNum = new byte[6]; Prot = prot; } public IPXEndPoint(string node, int num, ushort prot) { byte[] nodex = new byte[6]; string[] nodesp = node.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); if (nodesp.Length == 6) { for(int i=0;i<6;i++) { nodex[i] = Convert.ToByte("0x"+nodesp[i],16); } this.NodeNum = nodex; this.NetNum = new byte[4]; NetNum[3] = (byte)(num >> 24); NetNum[2] = (byte)(num >> 16); NetNum[1] = (byte)(num >> 8); NetNum[0] = (byte)(num); this.Prot = prot; } else { throw new ArgumentException("node"); } } public IPXEndPoint(byte[] netnum, byte[] nodenum, ushort prot) { this.NetNum = netnum; this.NodeNum = nodenum; this.Prot = prot; } public override System.Net.Sockets.AddressFamily AddressFamily { get { return System.Net.Sockets.AddressFamily.Ipx; } } public override EndPoint Create(SocketAddress socketAddress) { if (socketAddress == null) { throw new ArgumentNullException("socketAddress"); } if (socketAddress.Family != this.AddressFamily) { throw new ArgumentException("socketAddress"); } if (socketAddress.Size < 14) { throw new ArgumentException("socketAddress"); } ushort port = (ushort)(((socketAddress[12] << 8) & 0xff00) | socketAddress[13]); //return new IPEndPoint(((((socketAddress[4] & 0xff) | ((socketAddress[5] << 8) & 0xff00)) | ((socketAddress[6] << 0x10) & 0xff0000)) | (socketAddress[7] << 0x18)) & ((long)0xffffffffL), port); byte[] netnum = new byte[4]; netnum[3] = socketAddress[2]; netnum[2] = socketAddress[3]; netnum[1] = socketAddress[4]; netnum[0] = socketAddress[5]; byte[] codenum = new byte[6]; codenum[0] = socketAddress[6]; codenum[1] = socketAddress[7]; codenum[2] = socketAddress[8]; codenum[3] = socketAddress[9]; codenum[4] = socketAddress[10]; codenum[5] = socketAddress[11]; return new IPXEndPoint(netnum, codenum, port); } public override SocketAddress Serialize() { SocketAddress address = new SocketAddress(System.Net.Sockets.AddressFamily.Ipx, 14); address[2]=NetNum[3]; address[3] = NetNum[2]; address[4] = NetNum[1]; address[5] = NetNum[0]; address[6] = NodeNum[0]; address[7] = NodeNum[1]; address[8] = NodeNum[2]; address[9] = NodeNum[3]; address[10] = NodeNum[4]; address[11] = NodeNum[5]; address[12] = (byte)(Prot >> 8); address[13] = (byte)Prot; return address; } public override string ToString() { int num = BitConverter.ToInt32(NetNum,0); string node = ""; for(int i=0;i<NodeNum.Length;i++) { node += Convert.ToString(NodeNum[i], 16); if (i < NodeNum.Length - 1) { node += "-"; } } return node + ":0x" + Convert.ToString(num,16) + ":" + Prot; } }
写好后 初始化SOCKET对象:
sock = new Socket(AddressFamily.Ipx, SocketType.Stream, ProtocolType.Spx);
注意 Addressfamily和protype
初始化地址
IPXEndPoint myEnd = new IPXEndPoint("MAC地址", 节点号, 端口);
sock.Bind(myEnd);
其他的和常规的TCP服务一样..
你可以到我的个人代码上传空间去下载 基于 ZYSocketSuper 扩展的超级 SOCKET IPX/SPX服务器端 模型
http://download.csdn.net/source/1990672
相关文章推荐
- 使用C#task和异步socket实现多线程服务器
- C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)
- C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分(来源:http://blog.csdn.net/yangjundeng/archive/2005/03/17/321920.aspx)
- C#中使用Socket实现简单Web服务器
- 使用select异步IO实现socketserver服务器 源码剖析
- 完成端口(IOCP)实现高性能网络服务器(源码 C#)
- C#中使用Socket实现简单Web服务器
- C#使用Socket实现一个socket服务器与多个socket客户端通信
- C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)
- C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)
- C#中使用Socket实现简单Web服务器
- MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信
- (转载)Telnet协议详解及使用C# 用Socket 编程来实现Telnet协议
- C#.NET使用LhSocket5Net创建Socket5服务器
- C#.NET vs2010中使用IrisSkin4.dll轻松实现WinForm窗体换肤功能
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Socket实现仿QQ聊天(可部署于广域网)附源码(2)-服务器搭建
- C#使用多线程实现网络爬虫,并且通过网络传输,传到另外的服务器数据库存储
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分