<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    http://www.tkk7.com/ebecket 返還網(wǎng)
    隨筆-140  評論-11  文章-131  trackbacks-0
    我們的項目是用DotNet實現(xiàn)Socket連接,用多線程處理多用戶。我就談一下在實現(xiàn)過程中遇到的問題。下面是我服務(wù)器的簡化實現(xiàn)。
      private Socket clientSocket;
      
      public void Start()
      {
      Thread thread=new Thread(new ThreadStart(MainService));
      thread.Start();
      }
      void MainService()
      {
      listener=new TcpListener(111111);
      listener.Start();
      while(true)
      {
      Socket s= listener.AcceptSocket();//幀聽客戶連接
      clientSocket=s;
      Thread clientservice = new Thread(new ThreadStart(ClientService));
      clientservice.Start();
      Thread.Sleep(200);//1、等待傳值給線程中的變量,防止多用戶造成沖突
      }
      }
      
      void ClientService()
      {
      string command;
      string receiveStr;
      string fileName,fileSize;
      Socket sock=clientSocket;
      EndPoint oldEP=sock.RemoteEndPoint;
      byte[] bb=new byte[200];
      while(true)
      {
      ii=sock.ReceiveFrom(bb,ref oldEP);//接收數(shù)據(jù)
      if(ii==0)//2、客戶端連接斷開,就會不停接收0個字節(jié)
      {
      break;
      }
      receiveStr=Encoding.Default.GetString(bb,0,bb.Length);
      command=ReadLineFrom(receiveStr,1).ToLower();//ReadLineFrom讀取字符串中的一行數(shù)據(jù)
      Switch(command)
      {
      cace “upload“:
      fileName=ReadLineFrom(receiveStr,2);
      fileSize=ReadLineFrom(receiveStr,3);
      uploadFile(sock,fileName,Int32.Parse(fileSize));//接受數(shù)據(jù)方法,
      break;
      ....................
      }
      
      }
      
      void uploadFile(Socket sock,string fileName,int fileSize)
      {
      int loadSize=0;
      byte[] bb;
      int blen=102400;
      NetworkStream stream=new NetworkStream(sock);
      FileStream fs=File.OpenWrite(tempstr);
      while(loadSize   {
      if(loadSize>fileSize-102400)
      blen=fileSize-loadSize;
      bb=new byte[blen];
      int ii=stream.Read(bb,0,bb.Length);//3、實際接受數(shù)據(jù)時每次可能沒有10240個字節(jié)
      fs.Write(bb,0,ii);
      loadSize+=ii;
      }
      fs.Close();
      stream.Close();
      }
      
      1、等待傳值給線程中的變量,防止多用戶造成沖突
      
      2、客戶端連接斷開,就會不停接收0個字節(jié)
      判斷客戶端是否斷開要用這個方法實現(xiàn),Sokcet里帶的Connected不起作用,只要連接上,中途不出現(xiàn)發(fā)送和或接收數(shù)據(jù)錯誤,客戶斷開與否都是返回true。Poll(100,SelectMode...)返回任何模式都是true。
      
      3、實際接受數(shù)據(jù)時每次可能沒有10240個字節(jié)
      
      客戶端我就不寫了,用TcpClient連接就可以了,當(dāng)然實際應(yīng)用中,可能就要自己寫規(guī)則了
      
      這些問題解決了,只要做適當(dāng)?shù)奶幚恚曨l,聲音都不是問題了。
    posted on 2010-01-25 20:47 becket_zheng 閱讀(196) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 亚洲精品一区二区三区四区乱码| 亚洲无圣光一区二区| 日韩在线永久免费播放| 亚洲午夜电影在线观看| 亚洲无码日韩精品第一页| 久久精品私人影院免费看| 亚洲国产精品无码第一区二区三区| 亚洲中文无韩国r级电影| 91麻豆最新在线人成免费观看 | 亚洲精品一二三区| 免费v片视频在线观看视频| 亚洲免费精彩视频在线观看| 亚洲色无码国产精品网站可下载 | 中文字幕无码亚洲欧洲日韩| 亚洲午夜激情视频| 中文毛片无遮挡高潮免费| 久久久久免费视频| 中文日韩亚洲欧美制服| 亚洲AV无码专区在线播放中文| 好吊妞在线新免费视频| 日韩免费观看一区| 无码毛片一区二区三区视频免费播放 | 无码一区二区三区AV免费| 国产精品偷伦视频免费观看了| 国产人成亚洲第一网站在线播放| 亚洲人成网站在线播放vr| 在线免费观看毛片网站| 91福利免费视频| 中国一级特黄的片子免费 | 一本色道久久综合亚洲精品高清| 日韩中文字幕精品免费一区| 任你躁在线精品免费| 猫咪免费人成在线网站| 亚洲一区二区三区丝袜| 2022年亚洲午夜一区二区福利| 久久久亚洲精品蜜桃臀| 亚洲av片一区二区三区| 日本不卡在线观看免费v| 中文字幕无码免费久久99| 91大神免费观看| 无码中文字幕av免费放dvd|