2014-01-29 32 views
0

所以這裏收到的圖片是從我的客戶端接收的畫面在我的服務器代碼我怎樣才能使服務器從多個客戶端插座

public void Hey() 
{ 
    Functions.ServerSend("Picture"); 
    if (Functions.serverrecievetext().CompareTo("Okay") == 0) 
    { 
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

     LingerOption lo = new LingerOption(false, 0); 
     sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo); 

     try 
     { 
      sck.Bind(Login.ip_ep); 
      sck.Listen(100); 
      Socket accepted = sck.Accept(); 
      byte[] buff = new byte[300000]; 

      MemoryStream m = new MemoryStream(); 

      read = accepted.Receive(buff, buff.Length, 0); 
      m.Write(buff, 0, read); 
      while (read > 0) 
      { 
       read = accepted.Receive(buff, buff.Length,0); 
       if (read != 0) 
        m.Write(buff, 0, read); 
      } 

      Bitmap p = new Bitmap(m, false); 
      m.Dispose(); 
      pictureBox1.Image = p; 
      pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
      accepted.Close(); 

      sck.Dispose(); 
      sck.Close(); 
     } 
     catch (Exception f) 
     { 

     } 
    } 
} 



private void timer1_Tick(object sender, EventArgs e) 
{ 
    Thread t = new Thread(Hey); 
    t.Start(); 
} 

它工作得很好的一個客戶端,這裏是客戶端代碼:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    p = Functions.ClientRecieve(); 
    if (p.CompareTo("Picture") == 0) 
    { 
     Functions.ClientSendText("Okay"); 
     Bitmap b = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
     Graphics g = Graphics.FromImage(b as Image); 
     g.CopyFromScreen(0, 0, 0, 0, b.Size); 
     pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
     pictureBox1.Image = b; 
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

     try 
     { 
      sck.Connect(Login.ip_ep); 

      MemoryStream s = new MemoryStream(); 
      pictureBox1.Image.Save(s, System.Drawing.Imaging.ImageFormat.Png); 

      sck.Send(s.ToArray()); 
      sck.Disconnect(true); 
      sck.Dispose(); 
      sck.Close(); 
     } 
     catch (Exception f) 
     { 

     } 
    } 
    else 
    { 
     Functions.ClientSendText("Okay"); 
     timer1.Stop(); 
     this.Close(); 
    } 
} 

我希望服務器在同一時間收到來自不同客戶不同的圖片的能力(如果這甚至有可能) 注意到我打開一個新的服務器當我點擊按鈕,它給人的命令來啓動新客戶端也是 所以當我點擊按鈕兩次我想有兩個服務器表單,每個人都得到不同的圖片 在此先感謝^^

回答

0

您想同時接收來自多個客戶端的不同圖片。然後你需要學習使用線程。收件人服務器將偵聽客戶端,併爲每個將要編寫接收圖像代碼的客戶端啓動一個新線程。像這樣,您可以同時以並行方式接收或發送數據。

This將讓你開始用C#線程

+0

我知道線程基礎知識我怎麼也沒對上的按鈕點擊這將啓動服務器的每個客戶端一個線程的問題是,當我開始一個新的服務器服務器啓動從兩個客戶接收不只一個 –

+0

我不明白你想要什麼或問題是什麼?但是您的服務器代碼當然需要多線程才能處理多個客戶端,並且由於連接是TCP,並且您的代碼目前不實現該代碼。這不會是兩個或更多客戶端同時接收的問題,只是每個線程將獨立處理每個連接。 你說,你想有多個服務器接收,這是不可能在同一個端口。我們無法在同一端口運行多個服務器。 –

相關問題