<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#
    主站蜘蛛池模板: 99在线免费观看| 午夜亚洲国产精品福利| 亚洲人妻av伦理| 亚洲一卡2卡3卡4卡乱码 在线| 日韩免费电影网址| 麻豆国产VA免费精品高清在线 | 高清永久免费观看| 亚洲伊人久久综合影院| sss在线观看免费高清| 亚洲人午夜射精精品日韩| 97在线免费观看视频| 亚洲国产第一站精品蜜芽| 国产精品免费一区二区三区四区| 亚洲国产精品SSS在线观看AV | 一级特黄录像免费播放肥| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 午夜一级毛片免费视频| 处破女第一次亚洲18分钟| www.亚洲色图.com| 一二三区免费视频| 我想看一级毛片免费的| 亚洲av无码专区国产不乱码 | 怡红院亚洲红怡院在线观看| 亚洲国产一区二区视频网站| 特级做A爰片毛片免费看无码 | 女人裸身j部免费视频无遮挡| 精品亚洲视频在线观看| 老司机69精品成免费视频| 亚洲六月丁香六月婷婷蜜芽| 卡1卡2卡3卡4卡5免费视频| 四虎成人精品国产永久免费无码| 国产亚洲精品自在久久| 永久免费视频网站在线观看| 在线观看亚洲免费视频| 精品亚洲综合在线第一区| 青青在线久青草免费观看| 亚洲av午夜成人片精品网站| 在线视频精品免费| 四虎精品成人免费视频| 亚洲色欲www综合网| 免费v片在线观看品善网|