C#以太網(wǎng)Sockets服務(wù)器設(shè)計(jì)實(shí)現(xiàn)
【1】引用命名空間:
//System.Net.Sockets using System.Net.Sockets; // 以太網(wǎng)對(duì)象 ? // 字段位置 private Socket socket業(yè)務(wù); ?//對(duì)象既可以當(dāng)服務(wù)器,又可以當(dāng)客戶端 TcpListener tcpListener; ? //服務(wù)器對(duì)象 TcpClient tcpClient; ? ? ? //客戶端對(duì)象
Socket 構(gòu)造函數(shù):
public Socket(SocketInformation 套接字結(jié)構(gòu)體); public Socket(SocketType 插座類型, ProtocolType 協(xié)議類型); public Socket(AddressFamily 工作組, SocketType 插座類型, ProtocolType 協(xié)議類型);
參數(shù)介紹:
AddressFamily.InterNetwork=2 用 IPv4 public enum AddressFamily { Unknown = -1, //未知的地址族。 Unspecified = 0, //未指定的地址族。 Unix = 1, //Unix 本地到主機(jī)地址。 InterNetwork = 2, //IP 版本 4 的地址。 ImpLink = 3, //ARPANET IMP 地址。 Pup = 4, //PUP 協(xié)議的地址。 Chaos = 5, //MIT CHAOS 協(xié)議的地址。 NS = 6, //IPX 或 SPX 地址。 Ipx = 6, //Xerox NS 協(xié)議的地址。 Iso = 7, //ISO 協(xié)議的地址。 Osi = 7, //OSI 協(xié)議的地址。 Ecma = 8, //歐洲計(jì)算機(jī)制造商協(xié)會(huì) (ECMA) 地址。 DataKit = 9, //Datakit 協(xié)議的地址。 Ccitt = 10, //CCITT 協(xié)議(如 X.25)的地址。 Sna = 11, //IBM SNA 地址。 DecNet = 12, //DECnet 地址。 DataLink = 13, //直接數(shù)據(jù)鏈接接口地址。 Lat = 14, //LAT 地址。 HyperChannel = 0xF, //NSC Hyperchannel 地址。 AppleTalk = 0x10, //AppleTalk 地址。蘋果 NetBios = 17, //NetBios 地址。 VoiceView = 18, //VoiceView 地址。 FireFox = 19, //FireFox 地址。 Banyan = 21, //Banyan 地址。 Atm = 22, //本機(jī) ATM 服務(wù)地址。 InterNetworkV6 = 23,//IP 版本 6 的地址。 Cluster = 24, //Microsoft 群集產(chǎn)品的地址。 Ieee12844 = 25, //IEEE 1284.4 工作組地址。 Irda = 26, //IrDA 地址。 NetworkDesigners = 28,//支持網(wǎng)絡(luò)設(shè)計(jì)器 OSI 網(wǎng)關(guān)的協(xié)議的地址。 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】字段: 聲明對(duì)象
//聲明一個(gè)Socket對(duì)象 private Socket socketSever服務(wù)器; // 【1】Socket // 工作組,套接字類型,協(xié)議類型 socketSever服務(wù)器 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
【3】初始化:參數(shù)
//設(shè)置 服務(wù)器ip IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.0.7"), int.Parse(12345)); try { socketSever服務(wù)器.Bind(ipe);// 【2】Bind 綁定本地ip } catch (Exception ex) { //寫入日志 MessageBox.Show("服務(wù)器開啟失?。?+ex.Message); return; } // 調(diào)用listen()函數(shù)監(jiān)聽,業(yè)務(wù)窗口(同時(shí)辦理業(yè)務(wù)窗口數(shù))// 同時(shí)占線數(shù)量 socketSever服務(wù)器.Listen(10);// 【3】Listen Task.Run(new Action(() => //開線程,使主線程能退到ui層 { 客戶登錄業(yè)務(wù)(); // 【4】Accpet })); 按鈕_啟動(dòng)服務(wù).Enabled = false;
private void 客戶登錄業(yè)務(wù)() { while (true) { //等待客戶 Socket socketClient客戶 = socketSever服務(wù)器.Accept();// 【4】Accpet //客戶來(lái)了 string client客戶IP地址 = socketClient客戶.RemoteEndPoint.ToString(); 客戶電話簿.Add(client客戶IP地址, socketClient客戶); 占線刷新(client客戶IP地址, true); Task.Run(new Action(() => //第2隊(duì)線程 { Receive客戶經(jīng)理(socketClient客戶); })); } }
private void Receive客戶經(jīng)理(Socket socketClient) { while (true) { // 創(chuàng)建一個(gè)緩沖區(qū) byte[] buffer = new byte[1024 * 1024 * 10]; int length = -1; // 客戶ip string client = socketClient.RemoteEndPoint.ToString(); // 等待客戶發(fā)言 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; } } }
使用以太網(wǎng)
注意:對(duì)象不包含0個(gè)參數(shù)
到此這篇關(guān)于C#以太網(wǎng)Sockets服務(wù)器設(shè)計(jì)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C#以太網(wǎng)Sockets服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#讀取數(shù)據(jù)庫(kù)返回泛型集合詳解(DataSetToList)
本篇文章主要是對(duì)C#讀取數(shù)據(jù)庫(kù)返回泛型集合(DataSetToList)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01c#數(shù)據(jù)庫(kù)與TXT導(dǎo)入導(dǎo)出的實(shí)例
最近剛學(xué)完ADO.NET,做了個(gè)數(shù)據(jù)導(dǎo)入導(dǎo)出的題目,是將txt中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),然后將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到txt中,這里說(shuō)的數(shù)據(jù)的格式是“tom|23”,tom指名字,23指年齡。廢話也不多說(shuō)了,大家直接看代碼。2013-04-04c# 如何將RadioButton與DataTable數(shù)據(jù)進(jìn)行綁定
我接觸到的有將兩個(gè)控件的數(shù)據(jù)綁定、將控件的屬性與DataTable綁定,以下說(shuō)說(shuō)在將DataTable與RadioButton綁定的過(guò)程中出現(xiàn)的問(wèn)題2012-11-11