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

首頁 > 學院 > 編程應用 > 正文

C# 實現的異步 Socket 服務器

2019-11-17 03:14:52
字體:
來源:轉載
供稿:網友
C# 實現的異步 Socket 服務器

介紹

我最近需要為一個.net項目準備一個內部線程通信機制. 項目有多個使用asp.net,Windows 表單和控制臺應用程序的服務器和客戶端構成. 考慮到實現的可能性,我下定決心要使用原生的socket,而不是許多.NET中已經提前為我們構建好的組件, 像是所謂的管道, NetTcpClient 還有 Azure 服務總線.

這篇文章中的服務器基于System.Net.Sockets類異步方法. 這些允許你支持大量的socket客戶端, 而一個客戶端的連接是唯一的阻塞機制. 阻塞的時間是可以忽略不記得,所以服務器基本上是在當做一個多線程socket服務器在運作的.

背景

原生的socket在為你提供通信層面的完全控制權上具有優勢, 而在處理不同的數據類型是具有很大的靈活性. 你甚至可以通過socket發送序列化了的CLR對象,盡管我在這里不會那樣做. 這個項目將會想你展示如何在socket之間發送文本.

代碼的運用

使用下面的代碼,你初始化了一個Server類,并運行了Start()方法:

1ServermyServer=newServer();
2myServer.Start();

如果你計劃在一個Windows表單中管理服務器的話,我建議使用一個BackgroundWorker, 因為socket方法(一般會是ManualResentEvent) 將會阻塞GUI線程的運行.

Server 類:

01usingSystem.Net.Sockets;
02
03publicclassServer
04{
05PRivatestaticSocketlistener;
06publicstaticManualResetEventallDone=newManualResetEvent(false);
07publicconstint_bufferSize=1024;
08publicconstint_port=50000;
09publicstaticbool_isRunning=true;
10
11classStateObject
12{
13publicSocketworkSocket=null;
14publicbyte[]buffer=newbyte[bufferSize];
15publicStringBuildersb=newStringBuilder();
16}
17
18//Returnsthestringbetweenstr1andstr2
19staticstringBetween(stringstr,stringstr1,stringstr2)
20{
21inti1=0,i2=0;
22stringrtn="";
23
24i1=str.IndexOf(str1,StringComparison.InvariantCultureIgnoreCase);
25if(i1>-1)
26{
27i2=str.IndexOf(str2,i1+1,StringComparison.InvariantCultureIgnoreCase);
28if(i2>-1)
29{
30rtn=str.Substring(i1+str1.Length,i2-i1-str1.Length);
31}
32}
33returnrtn;
<p id="brtda"></p>
<small id="brtda"><tbody id="brtda"><dfn id="brtda"></dfn></tbody></small>

    1. 34
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      主站蜘蛛池模板: 库伦旗| 电白县| 姚安县| 湖州市| 南阳市| 济宁市| 高台县| 南澳县| 宁陕县| 株洲市| 娱乐| 麟游县| 孝昌县| 岐山县| 夏津县| 专栏| 洪湖市| 沙洋县| 普定县| 西畴县| 昭平县| 左云县| 绥德县| 家居| 天全县| 额敏县| 吴川市| 苍山县| 陇南市| 泗洪县| 德钦县| 汨罗市| 东平县| 钟祥市| 万年县| 彰武县| 革吉县| 浑源县| 门源| 沽源县| 响水县|