C#以太网Sockets服务器设计实现
cfqq1989 人气:0【1】引用命名空间:
//System.Net.Sockets using System.Net.Sockets; // 以太网对象 // 字段位置 private Socket socket业务; //对象既可以当服务器,又可以当客户端 TcpListener tcpListener; //服务器对象 TcpClient tcpClient; //客户端对象
Socket 构造函数:
public Socket(SocketInformation 套接字结构体); public Socket(SocketType 插座类型, ProtocolType 协议类型); public Socket(AddressFamily 工作组, SocketType 插座类型, ProtocolType 协议类型);
参数介绍:
AddressFamily.InterNetwork=2 用 IPv4 public enum AddressFamily { Unknown = -1, //未知的地址族。 Unspecified = 0, //未指定的地址族。 Unix = 1, //Unix 本地到主机地址。 InterNetwork = 2, //IP 版本 4 的地址。 ImpLink = 3, //ARPANET IMP 地址。 Pup = 4, //PUP 协议的地址。 Chaos = 5, //MIT CHAOS 协议的地址。 NS = 6, //IPX 或 SPX 地址。 Ipx = 6, //Xerox NS 协议的地址。 Iso = 7, //ISO 协议的地址。 Osi = 7, //OSI 协议的地址。 Ecma = 8, //欧洲计算机制造商协会 (ECMA) 地址。 DataKit = 9, //Datakit 协议的地址。 Ccitt = 10, //CCITT 协议(如 X.25)的地址。 Sna = 11, //IBM SNA 地址。 DecNet = 12, //DECnet 地址。 DataLink = 13, //直接数据链接接口地址。 Lat = 14, //LAT 地址。 HyperChannel = 0xF, //NSC Hyperchannel 地址。 AppleTalk = 0x10, //AppleTalk 地址。苹果 NetBios = 17, //NetBios 地址。 VoiceView = 18, //VoiceView 地址。 FireFox = 19, //FireFox 地址。 Banyan = 21, //Banyan 地址。 Atm = 22, //本机 ATM 服务地址。 InterNetworkV6 = 23,//IP 版本 6 的地址。 Cluster = 24, //Microsoft 群集产品的地址。 Ieee12844 = 25, //IEEE 1284.4 工作组地址。 Irda = 26, //IrDA 地址。 NetworkDesigners = 28,//支持网络设计器 OSI 网关的协议的地址。 Max = 29 //MAX 地址。 }
SocketType.Stream
public enum SocketType { Stream = 1,// Tcp InterNetwork 地址族 //支持可靠、双向 Dgram = 2, // Udp InterNetwork 地址族。 Raw = 3, Rdm = 4, Seqpacket = 5, Unknown = -1//指定未知的 Socket 类型。 }
ProtocolType.Tcp
public enum ProtocolType { IP = 0, IPv6HopByHopOptions = 0, Icmp = 1, Igmp = 2, Ggp = 3, IPv4 = 4, Tcp = 6, Pup = 12, Udp = 17, Idp = 22, IPv6 = 41, IPv6RoutingHeader = 43, IPv6FragmentHeader = 44, IPSecEncapsulatingSecurityPayload = 50, IPSecAuthenticationHeader = 51, IcmpV6 = 58, IPv6NoNextHeader = 59, IPv6DestinationOptions = 60, ND = 77, Raw = 0xFF, Unspecified = 0, Ipx = 1000, Spx = 1256, SpxII = 1257, Unknown = -1 }
【2】字段: 声明对象
//声明一个Socket对象 private Socket socketSever服务器; // 【1】Socket // 工作组,套接字类型,协议类型 socketSever服务器 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
【3】初始化:参数
//设置 服务器ip IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.0.7"), int.Parse(12345)); try { socketSever服务器.Bind(ipe);// 【2】Bind 绑定本地ip } catch (Exception ex) { //写入日志 MessageBox.Show("服务器开启失败:"+ex.Message); return; } // 调用listen()函数监听,业务窗口(同时办理业务窗口数)// 同时占线数量 socketSever服务器.Listen(10);// 【3】Listen Task.Run(new Action(() => //开线程,使主线程能退到ui层 { 客户登录业务(); // 【4】Accpet })); 按钮_启动服务.Enabled = false;
private void 客户登录业务() { while (true) { //等待客户 Socket socketClient客户 = socketSever服务器.Accept();// 【4】Accpet //客户来了 string client客户IP地址 = socketClient客户.RemoteEndPoint.ToString(); 客户电话簿.Add(client客户IP地址, socketClient客户); 占线刷新(client客户IP地址, true); Task.Run(new Action(() => //第2队线程 { Receive客户经理(socketClient客户); })); } }
private void Receive客户经理(Socket socketClient) { while (true) { // 创建一个缓冲区 byte[] buffer = new byte[1024 * 1024 * 10]; int length = -1; // 客户ip string client = socketClient.RemoteEndPoint.ToString(); // 等待客户发言 try { length = socketClient.Receive(buffer); } catch (Exception) { // 下线了 占线刷新(client, false); 客户电话簿.Remove(client); break; } if (length > 0) {// 委托呼叫 wt(client,Encoding.UFT8.GetString(buffer,0,length)); } else { // 下线了 占线刷新(client, false); 客户电话簿.Remove(client); break; } } }
使用以太网
注意:对象不包含0个参数
加载全部内容