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

C# socket通信隨記回顧

系統(tǒng) 2466 0

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

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

不可靠,但是效率高;

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

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

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

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

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

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

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

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

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

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

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

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

而監(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);

??????????? //穿點套接字:

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

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

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

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

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

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

?

??????? }

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

??????? {

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

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

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

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

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

??????????????? //存儲這些通信管道;

??????????????? 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錯誤:訪問人數(shù)過多

--------

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

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

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

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

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

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

C# socket通信隨記回顧


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 庄浪县| 德惠市| 鄂温| 堆龙德庆县| 潮州市| 顺平县| 翁牛特旗| 凌海市| 慈溪市| 安庆市| 枣庄市| 神池县| 亚东县| 博兴县| 辽阳县| 永顺县| 芜湖市| 冕宁县| 长宁县| 柏乡县| 苍山县| 岳池县| 隆子县| 城市| 连城县| 监利县| 尖扎县| 西藏| 于都县| 祁东县| 云梦县| 太湖县| 台州市| 深圳市| 通山县| 阳曲县| 湟中县| 平凉市| 类乌齐县| 云和县| 灵石县|