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)客戶(hù)端 TcpListener tcpListener; ? //服務(wù)器對(duì)象 TcpClient tcpClient; ? ? ? //客戶(hù)端對(duì)象
Socket 構(gòu)造函數(shù):
public Socket(SocketInformation 套接字結(jié)構(gòu)體); public Socket(SocketType 插座類(lèi)型, ProtocolType 協(xié)議類(lèi)型); public Socket(AddressFamily 工作組, SocketType 插座類(lèi)型, ProtocolType 協(xié)議類(lèi)型);
參數(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 地址。蘋(píng)果
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 類(lèi)型。
}
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 // 工作組,套接字類(lèi)型,協(xié)議類(lèi)型 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)
{
//寫(xiě)入日志
MessageBox.Show("服務(wù)器開(kāi)啟失?。?+ex.Message);
return;
}
// 調(diào)用listen()函數(shù)監(jiān)聽(tīng),業(yè)務(wù)窗口(同時(shí)辦理業(yè)務(wù)窗口數(shù))// 同時(shí)占線(xiàn)數(shù)量
socketSever服務(wù)器.Listen(10);// 【3】Listen
Task.Run(new Action(() => //開(kāi)線(xiàn)程,使主線(xiàn)程能退到ui層
{
客戶(hù)登錄業(yè)務(wù)(); // 【4】Accpet
}));
按鈕_啟動(dòng)服務(wù).Enabled = false;private void 客戶(hù)登錄業(yè)務(wù)()
{
while (true)
{
//等待客戶(hù)
Socket socketClient客戶(hù) = socketSever服務(wù)器.Accept();// 【4】Accpet
//客戶(hù)來(lái)了
string client客戶(hù)IP地址 = socketClient客戶(hù).RemoteEndPoint.ToString();
客戶(hù)電話(huà)簿.Add(client客戶(hù)IP地址, socketClient客戶(hù));
占線(xiàn)刷新(client客戶(hù)IP地址, true);
Task.Run(new Action(() => //第2隊(duì)線(xiàn)程
{
Receive客戶(hù)經(jīng)理(socketClient客戶(hù));
}));
}
}private void Receive客戶(hù)經(jīng)理(Socket socketClient)
{
while (true)
{
// 創(chuàng)建一個(gè)緩沖區(qū)
byte[] buffer = new byte[1024 * 1024 * 10];
int length = -1;
// 客戶(hù)ip
string client = socketClient.RemoteEndPoint.ToString();
// 等待客戶(hù)發(fā)言
try
{
length = socketClient.Receive(buffer);
}
catch (Exception)
{
// 下線(xiàn)了
占線(xiàn)刷新(client, false);
客戶(hù)電話(huà)簿.Remove(client);
break;
}
if (length > 0)
{// 委托呼叫
wt(client,Encoding.UFT8.GetString(buffer,0,length));
}
else
{
// 下線(xiàn)了
占線(xiàn)刷新(client, false);
客戶(hù)電話(huà)簿.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-01
c#數(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指年齡。廢話(huà)也不多說(shuō)了,大家直接看代碼。2013-04-04
c# 如何將RadioButton與DataTable數(shù)據(jù)進(jìn)行綁定
我接觸到的有將兩個(gè)控件的數(shù)據(jù)綁定、將控件的屬性與DataTable綁定,以下說(shuō)說(shuō)在將DataTable與RadioButton綁定的過(guò)程中出現(xiàn)的問(wèn)題2012-11-11

