日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

C# socket通信隨記回顧

系統(tǒng) 2493 0

----tcp(傳輸 控制 協(xié)議)是可靠消息:三次握手(發(fā)給對(duì)方,對(duì)方發(fā)給自己,證明對(duì)方接到消息,在發(fā)給對(duì)方,說明自己能接到對(duì)方消息,這樣就都知道了):tcp:每發(fā)送一次消息,對(duì)方都會(huì)回復(fù),證明接受到了所以是可靠地;包含許多校驗(yàn),效率差;

---(UDP:用戶 數(shù)據(jù)報(bào) 協(xié)議)數(shù)據(jù)報(bào)文服務(wù):消息發(fā)送給對(duì)方就完事了,不管你是否接收到;

不可靠,但是效率高;

-----應(yīng)用層協(xié)議:Http,Ftp,Popj SMTp

-----傳輸層:TCP,ICMP,UDP

-----網(wǎng)絡(luò)層:IP,ARP ;

socket是應(yīng)用層和傳輸層之間的交互;

---端口:三類:工人端口、注冊(cè)端口、動(dòng)態(tài)私有端口(這些可以用)

---套接字指的是socket;封裝的網(wǎng)絡(luò)插口;

----服務(wù)端:1創(chuàng)建socket,綁定端口和ip;打開監(jiān)聽,接受客戶端;

----客戶端:創(chuàng)建socket,鏈接服務(wù)器,創(chuàng)建ip端口,進(jìn)行鏈接;

--服務(wù)器端接受科幻段消息時(shí),創(chuàng)建socketProxy對(duì)象,占用系統(tǒng)自動(dòng)分配的

一個(gè)端口,發(fā)送消息時(shí)重新占用新的端口,原來端口繼續(xù)監(jiān)聽;

--說白了,監(jiān)聽端口收到消息創(chuàng)建新的socket對(duì)象,并綁定新的端口進(jìn)行通信

--這個(gè)端口就幫死了,傳遞接受都用這一個(gè)端口),

而監(jiān)聽端口繼續(xù)監(jiān)聽,

? public partial class Form1 : Form

??? {

??????? List<Socket> list = new List<Socket>();

??????? public Form1()

??????? {

??????????? InitializeComponent();

??????? }

??????? private void Form1_Load(object sender, EventArgs e)

??????? {

?

??????? }

?

??????? private void button1_Click(object sender, EventArgs e)

??????? {

??????????? string ip = "192.168.1.1";

??????????? //創(chuàng)建ip地址:

??????????? IPAddress ipAddress = IPAddress.Parse(ip);

??????????? //創(chuàng)建端口

??????????? IPEndPoint ipPoint = new IPEndPoint(ipAddress, 3030);

??????????? //穿點(diǎn)套接字:

??????????? //參數(shù)1:尋址方式;參數(shù)2:socket傳輸方式:stream tcp方式,Dgram:數(shù)據(jù)報(bào)方式,第三個(gè)參數(shù):協(xié)議

??????????? Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

??????????? //綁定端口和ip

??????????? s.Bind(ipPoint);

??????????? //開始監(jiān)聽:(請(qǐng)求最大連接長(zhǎng)度),s為委托參數(shù);

??????????? ThreadPool.QueueUserWorkItem(new WaitCallback(Accept), s);

?

??????? }

??????? public void Accept(object obj)

??????? {

??????????? Socket socket = (Socket)obj;

??????????? while (true)

??????????? {

??????????????? //接受客戶端的一個(gè)連接創(chuàng)建代理套接字

??????????????? Socket proxys = socket.Accept();

??????????????? //存儲(chǔ)這些通信管道;

??????????????? list.Add(proxys);

??????????????? //獲取套接字端口和ip;

??????????????? // proxys.RemoteEndPoint.ToString();

??????????? ????ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptStarts), proxys);

??????????? }

??????? }

??????? public void AcceptStarts(object obj)

??????? {

??????????? Socket socket = (Socket)obj;

??????????? while (true)

??????????? {

??????????????? //通過判斷異常來判斷,是否客戶端已中斷,來關(guān)閉服務(wù)端的socket;

??????????????? try

??????????????? {

??????????????????? byte[] buffer = new byte[1024 * 1024];

??????????????????? int realLength = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);

??????????????????? string strResult = Encoding.Default.GetString(buffer, 0, buffer.Length);

??????????????? }

??????????????? catch

??????????????? {

??????????????????? socket.Close();

??????????????????? //異常已失效斷開的socket;

??????????????????? list.Remove(socket);

??????????????? }

???? ???????}

??????? }

?

??????? private void button2_Click(object sender, EventArgs e)

??????? {

??????????? //發(fā)送消息

??????????? foreach (Socket s in list)

??????????? {

??????????????? //防止socket斷開失效;

??????????????? try

??????????????? {

??????????????????? string str = "發(fā)送內(nèi)容";

??????????????????? byte[] bytes = Encoding.Default.GetBytes(str);

??????????????????? s.Send(bytes, SocketFlags.None);

??????????????? }

??????????????? catch

??????????????? {

??????????????????? s.Close();

????? ??????????????//異常已失效斷開的socket;

??????????????????? list.Remove(s);

??????????????? }

??????????? }

??????? }

??? }

--------------------客戶端

?public partial class 客戶端 : Form

??? {

??????? public Socket CurrentSocket { get; set; }

??????? public 客戶端()

????? ??{

??????????? InitializeComponent();

??????? }

??????? private void button1_Click(object sender, EventArgs e)

??????? {

??????????? Socket socket =null;

??????????? try

??????????? {

??????????????? IPAddress ipAddress = IPAddress.Parse("192.168.1.1");

??????????????? IPEndPoint endpoint = new IPEndPoint(ipAddress, 8080);

??????????????? //創(chuàng)建socket;

??????????????? socket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

??????????????? socket.Connect(endpoint);

????????????? ??CurrentSocket = socket;

??????????? }

??????????? catch

??????????? {

??????????????? if (socket != null)

??????????????? {

??????????????????? socket.Dispose();

??????????????? }

??????????? }

??????? }

?

??????? private void button2_Click(object sender, EventArgs e)

??????? {

??????????? byte[] bytes = Encoding.Default.GetBytes("sdfsdfd");

??????????? if (CurrentSocket != null)

??????????? {

??????????????? try

??????????????? {

??????????????????? CurrentSocket.Send(bytes, 0, bytes.Length, 0);

??????????????? }

??????????????? catch

??????????????? {

??????????????????? CurrentSocket.Dispose();

??????????????? }

??????????? }

??????? }

??? }

socket傳遞的數(shù)據(jù)都是byte[]數(shù)組類型;

服務(wù)器端通過捕獲異常來知道客戶端關(guān)閉連接;

? Encoding.Default.GetBytes();

----503錯(cuò)誤:訪問人數(shù)過多

--------

-------------字節(jié)塊拷貝: //字節(jié)塊拷貝:

??????????????? byte[] a = new byte[1024];

??????????????? byte[] b = new byte[1025];

??????????????? b[0] =1;//這樣可以說是自定義協(xié)議;第一個(gè)位代表什么意思;接受時(shí)根據(jù)第一個(gè)字節(jié)判斷是傳送的什么數(shù)據(jù)文件(比如1代表圖片)

??????????????? Buffer.BlockCopy(a, 0, b,1,a.Length);

---魔鬼數(shù)字:1代表什么2代表什么,千萬(wàn)別使用,通常使用枚舉;

C# socket通信隨記回顧


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 凌海市| 彭州市| 虹口区| 张家界市| 西宁市| 七台河市| 林口县| 林周县| 孟连| 神农架林区| 郑州市| 南康市| 大同市| 长岭县| 祥云县| 灵寿县| 大关县| 邹城市| 颍上县| 桂平市| 奈曼旗| 永定县| 青海省| 永修县| 惠安县| 宜君县| 封丘县| 黄石市| 通许县| 镇远县| 华蓥市| 余庆县| 桃园市| 永和县| 兴和县| 太白县| 青岛市| 碌曲县| 章丘市| 毕节市| 建瓯市|