国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Socket知識總結

2019-11-17 03:15:33
字體:
來源:轉載
供稿:網友

Socket知識總結

一、網絡編程相關概念

1、 互聯網通過ip定位電腦

2、 在電腦中通過port定位程序

3、 程序和程序之間通過協議定義通信數據格式

二、Socket相關概念

1、 ip地址

1) 每臺聯網的電腦都有一個唯一的ip地址。

2) 長度32位,分為4段,每段8位,用十進制表示,每段范圍0~255.

3) 特殊ip:127.0.0.1用戶本地網卡測試。

2、 端口

1) 網絡中有很多電腦,這些電腦一般運行了多個網絡程序,每種網絡程序都打開一個Socket,并綁定到一個端口上,不同的端口對應不同的網絡程序。

2) 常用端口,21 ftp, 25 smtp,110 pop3,80 http,443 https

3、 Socket通俗理解:人和人通過電話來通訊,電話號碼就相當于是ip地址,人就是程序,套接字就是程序間的電話,程序和程序之間通訊,需要定義通訊協議,就像兩個人打電話要先定義好彼此說的語言,這樣才能正常通訊。

4、 Socket流式(服務端和客戶端)

1) 服務器welcoming socket開始監聽端口(負責監聽客戶端的連接信息)

2) 客戶端client socket連接服務端制定端口(負責接收和發送服務端信息)

3) 服務端welcoming socket監聽到客戶端連接,創建connection socket(負責和客戶端通訊)

Demo1

服務端代碼:

委托類DGCloseConn

1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 6 namespace C03聊天室服務端7 {8     public delegate void DGCloseConn(string endpoint);9 }
View Code

委托類DGShowMsg

1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 6 namespace C03聊天室服務端7 {8     public delegate void DGShowMsg(string msg);9 }
View Code

MsgConnection類

  1 using System;  2 using System.Collections.Generic;  3 using System.Text;  4   5 using System.Net;  6 using System.Net.Sockets;  7 using System.Threading;  8   9 namespace C03聊天室服務端 10 { 11     /// <summary> 12     /// 通信管理類 - 負責 處理 與某個 客戶端通信的過程 13     /// </summary> 14     public class MsgConnection 15     { 16         /// <summary> 17         /// 與某個 客戶端通信的套接字 18         /// </summary> 19         Socket sokMsg = null; 20         /// <summary> 21         /// 通信線程 22         /// </summary> 23         Thread thrMsg = null; 24         /// <summary> 25         /// 在窗體顯示消息的方法 26         /// </summary> 27         DGShowMsg dgShow = null; 28         /// <summary> 29         /// 關閉 客戶端連接 方法 30         /// </summary> 31         DGCloseConn dgCloseConn = null; 32  33         #region 0.0 構造函數 34         public MsgConnection(Socket sokMsg, DGShowMsg dgShow, DGCloseConn dgCloseConn) 35         { 36             this.sokMsg = sokMsg; 37             this.dgShow = dgShow; 38             this.dgCloseConn = dgCloseConn; 39             //創建通信線程 負責 調用 通信套接字 來接受客戶端消息 40             thrMsg = new Thread(ReceiveMsg); 41             thrMsg.IsBackground = true; 42             thrMsg.Start(this.sokMsg); 43         }  44         #endregion 45  46         bool isReceive = true; 47         #region 2.0 接收客戶端消息 48         void ReceiveMsg(object obj) 49         { 50             Socket sokMsg = obj as Socket; 51             //3.通信套接字 監聽 客戶端的 消息 52             //3.1創建 消息緩存區 53             byte[] arrMsg = new byte[1024 * 1024 * 1]; 54             try 55             { 56                 while (isReceive) 57                 { 58                     //3.2接收客戶端的消息 并存入 緩存區,注意:Receive方法也會阻斷當前的線程 59                     //   并 返回 真實 接收到客戶端 數據的 字節長度 60                     int realLength = sokMsg.Receive(arrMsg); 61                     //3.3將接收到的消息 轉成 字符串 62                     string strMsg = System.Text.Encoding.UTF8.GetString(arrMsg, 0, realLength); 63                     //3.4將消息 顯示到 文本框 64                     dgShow(strMsg); 65                 } 66             } 67             catch (Exception ex) 68             { 69                 //調用 窗體類的 關閉移除方法 70                 dgCloseConn(sokMsg.RemoteEndPoint.ToString()); 71                 //顯示消息 72                 dgShow("客戶端斷開連接~!"); 73             } 74         } 75         #endregion 76  77         #region 3.0 向客戶端發送 文本消息 +void SendMsg(string msg) 78         /// <summary> 79         /// 3.0 向客戶端發送 文本消息 80         /// </summary> 81         /// <param name="msg"></param> 82         public void SendMsg(string msg) 83         { 84             //使用 指定的 通信套接字 將 字符串 發送到 指定的客戶端 85             byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(msg); 86             try 87             { 88                 byte[] newArr = MakeNew("str", arrMsg); 89                 sokMsg.Send(newArr); 90             } 91             catch (Exception ex) 92             { 93                 dgShow("異常:" + ex.Message); 94             } 95         } 96         #endregion 97  98         #region 4.0 向客戶端 發送 文本 文件 +void SendFile(string strPath) 99         /// <summary>100         /// 4.0 向客戶端 發送 文本 文件101         /// </summary>102         /// <param name="strFilePath"></param>103         public void SendFile(string strFilePath)104         {105             //6.2 讀取要發送的文件106             byte[] arrFile = System.IO.File.ReadAllBytes(strFilePath);107             byte[] arrNew = MakeNew("file", arrFile);108             //6.3 向客戶端 發送文件109             sokMsg.Send(arrNew);110         } 111         #endregion112 113         #region 5.0 向客戶端 發送抖屏命令 +void SendShake()114         /// <summary>115         /// 5.0 向客戶端 發送抖屏命令116         /// </summary>117         public void SendShake()118         {119             sokMsg.Send(new byte[1] { 2 });120         } 121         #endregion122 123         #region 5.0 返回帶標識的 新數組 +byte[] MakeNew(string type, byte[] oldArr)124         /// <summary>125         /// 返回帶標識的 新數組126         /// </summary>127         /// <param name="type"></param>128         /// <param name="oldArr"></param>129         /// <returns></returns>130         public byte[] MakeNew(string type, byte[] oldArr)131         {132             //6.2 創建一個新數組(是原數組長度 + 1)133             byte[] newArrFiel = new byte[oldArr.Length + 1];134             //6.3 將原數組數據 復制到 新數組中(從新數組下標為1的位置放)135             oldArr.CopyTo(newArrFiel, 1);136             //6.4 根據 內容類型, 為新數組第一個元素 設置標識符號137             switch (type.ToLower())138             {139                 case "str":140                     newArrFiel[0] = 0;//只能存 0-255之間的數值, 'a'; //  byte = 8 bit   ,  1bit = 1個 0 或者 1 , 256 141                     break;142                 case "file":143                     newArrFiel[0] = 1;144                     break;145                 default:146                     newArrFiel[0] = 2;147                     break;148             }149             return newArrFiel;150         } 151         #endregion152 153         #region 4.0 關閉通信154         /// <summary>155         /// 關閉通信156         /// </summary>157         public void Close()158         {159             isReceive = false;160             sokMsg.Close();161             sokMsg = null;162         } 163         #endregion164     }165 }
View Code

FormServer

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 申扎县| 车险| 江门市| 武冈市| 新干县| 随州市| 邵武市| 土默特右旗| 潼南县| 林州市| 沅陵县| 嫩江县| 资阳市| 耿马| 宁津县| 偏关县| 湖州市| 翁源县| 北碚区| 怀化市| 凌源市| 马尔康县| 博爱县| 麦盖提县| 丰宁| 通化县| 德阳市| 台中县| 景德镇市| 会泽县| 海城市| 宝丰县| 阆中市| 海兴县| 靖安县| 南皮县| 苍溪县| 博客| 襄汾县| 奉节县| 嫩江县|