<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 返還網
    隨筆-140  評論-11  文章-131  trackbacks-0
    我們的項目是用DotNet實現Socket連接,用多線程處理多用戶。我就談一下在實現過程中遇到的問題。下面是我服務器的簡化實現。
      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);//接收數據
      if(ii==0)//2、客戶端連接斷開,就會不停接收0個字節
      {
      break;
      }
      receiveStr=Encoding.Default.GetString(bb,0,bb.Length);
      command=ReadLineFrom(receiveStr,1).ToLower();//ReadLineFrom讀取字符串中的一行數據
      Switch(command)
      {
      cace “upload“:
      fileName=ReadLineFrom(receiveStr,2);
      fileSize=ReadLineFrom(receiveStr,3);
      uploadFile(sock,fileName,Int32.Parse(fileSize));//接受數據方法,
      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、實際接受數據時每次可能沒有10240個字節
      fs.Write(bb,0,ii);
      loadSize+=ii;
      }
      fs.Close();
      stream.Close();
      }
      
      1、等待傳值給線程中的變量,防止多用戶造成沖突
      
      2、客戶端連接斷開,就會不停接收0個字節
      判斷客戶端是否斷開要用這個方法實現,Sokcet里帶的Connected不起作用,只要連接上,中途不出現發送和或接收數據錯誤,客戶斷開與否都是返回true。Poll(100,SelectMode...)返回任何模式都是true。
      
      3、實際接受數據時每次可能沒有10240個字節
      
      客戶端我就不寫了,用TcpClient連接就可以了,當然實際應用中,可能就要自己寫規則了
      
      這些問題解決了,只要做適當的處理,視頻,聲音都不是問題了。
    posted on 2010-01-25 20:47 becket_zheng 閱讀(193) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 日韩免费电影网址| 国产精品亚洲专区一区| 99精品热线在线观看免费视频 | 亚洲精华国产精华精华液好用| 日韩精品免费一级视频| 亚洲人成电影在线观看青青| 青春禁区视频在线观看直播免费| 456亚洲人成影院在线观| 麻豆国产VA免费精品高清在线| 亚洲人av高清无码| 国产精品免费视频一区| 一区二区三区免费视频播放器| 国产亚洲精品无码成人| 91成人在线免费观看| 亚洲无mate20pro麻豆| 成人免费视频国产| 亚洲视频在线免费| 亚洲免费视频网站| 免费做爰猛烈吃奶摸视频在线观看| 亚洲精品无码专区在线播放| 免费一级e一片在线播放| 在线观看黄片免费入口不卡| 亚洲AV无码一区二区乱子伦| 四虎在线最新永久免费| 国产精品亚洲专区无码唯爱网| 亚洲五月午夜免费在线视频| 毛片基地看看成人免费| 亚洲第一精品电影网| 免费看的黄色大片| 四虎国产精品免费永久在线| 99久久精品国产亚洲| 国产精品黄页在线播放免费| 中国videos性高清免费| 亚洲国产成人精品无码一区二区 | 亚洲今日精彩视频| 免费无码精品黄AV电影| 免费一级毛片在线播放视频免费观看永久 | 97人妻无码一区二区精品免费| 亚洲日本VA午夜在线电影| 国产精品亚洲不卡一区二区三区 | 9277手机在线视频观看免费|