Advertisement
Guest User

Server

a guest
Aug 15th, 2016
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.00 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Data;
  13. using System.Windows.Documents;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Media.Imaging;
  17. using System.Windows.Navigation;
  18. using System.Windows.Shapes;
  19.  
  20. namespace serverDoWielu
  21. {
  22.     public partial class MainWindow : Window
  23.     {
  24.        
  25.         private List<TcpClient> listaClientow = new List<TcpClient>();
  26.         private List<StreamReader> listaSTR = new List<StreamReader>();
  27.         private List<StreamWriter> listaSTW = new List<StreamWriter>();
  28.  
  29.         private string received;
  30.         private String text_to_send;                                            
  31.         public BackgroundWorker worker1;
  32.         public BackgroundWorker worker2;
  33.         public BackgroundWorker worker3;
  34.  
  35.         public MainWindow()
  36.         {
  37.             InitializeComponent();
  38.             worker1 = new BackgroundWorker();
  39.             worker1.DoWork += backgroundWorker1_DoWork;
  40.             worker2 = new BackgroundWorker();
  41.             worker2.DoWork += backgroundWorker2_DoWork;
  42.             worker3 = new BackgroundWorker();
  43.             worker3.DoWork += backgroundWorker3_DoWork;
  44.         }
  45.  
  46.         private void button_Click(object sender, RoutedEventArgs e)
  47.         {
  48.             worker3.RunWorkerAsync(); // po odpaleniu serwera nasluchuje nowych klientow
  49.         }
  50.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  51.         {
  52.             while (true)
  53.             {
  54.                 try
  55.                 {
  56.                     foreach (var item in listaSTR)
  57.                     {
  58.                         received = item.ReadLine();
  59.                         text_to_send = received;
  60.                     }
  61.                     worker2.RunWorkerAsync();  
  62.                 }
  63.                 catch (Exception ex)
  64.                 {
  65.                     MessageBox.Show(ex.Message);
  66.                 }
  67.             }
  68.         }
  69.         private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)//wysyl wiadomosci
  70.         {
  71.             if (true)
  72.             {
  73.                
  74.                 foreach (var item in listaSTW)      //wysyłamy do kazdego klienta
  75.                 {
  76.                     item.WriteLine(text_to_send);
  77.                 }  
  78.             }
  79.             else
  80.             {
  81.                 MessageBox.Show("send failed !");
  82.             }
  83.             worker2.CancelAsync();
  84.         }
  85.         private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
  86.         {
  87.             TcpListener listener = new TcpListener(IPAddress.Any, 13000);
  88.             //listaTcpListener.Add(new TcpListener(IPAddress.Any, 13000)); czy wystarczy 1 listener?
  89.             bool NieMaZadnegoKlienta = true;
  90.  
  91.             int licznikClientow = 0;
  92.             while (true)
  93.             {
  94.                 listener.Start(); // nasluchujemy
  95.                 listaClientow.Add(new TcpClient()); // dodajemy nowego
  96.  
  97.                 listaClientow[licznikClientow] = listener.AcceptTcpClient(); //przypisujemy
  98.                 listaSTR.Add(new StreamReader(  listaClientow[licznikClientow].GetStream() ) );  // do czytania
  99.                 listaSTW.Add(new StreamWriter(  listaClientow[licznikClientow].GetStream() ) );   // do wysylania wiadomosci
  100.                 listaSTW[licznikClientow].AutoFlush = true; //czysci bufor
  101.                 if(listaClientow[0].Connected && NieMaZadnegoKlienta) // start watku nasluchiwania przez serwer
  102.                 {
  103.                     NieMaZadnegoKlienta = false;
  104.                     worker1.RunWorkerAsync();  // ten nasluchuje
  105.                     worker2.WorkerSupportsCancellation = true; //ten wysla
  106.                 }
  107.                 licznikClientow++;
  108.                
  109.             }
  110.         }
  111.        
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement