tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1357
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von desaster0505
    desaster0505 desaster0505 ist offline Mitglied Gold
    Registriert seit
    Dec 2006
    Ort
    Lampertheim
    Beiträge
    185
    Hi !

    Habe auf der Suche nach meinem Problem diesen Thread gefunden:

    http://www.tutorials.de/forum/net-ar...-programm.html

    Mich interessiert ob ich das als Basis für ein Programm nehmen kann, welches einen Text (und keine Datei wie im Thread oben) an mehrere Clients (es handelt sich um das gleiche Programm) über das Internet (IPs seien bekannt) senden und von diesen Clients auch empfangen kann?

    Oder gibt es dafür noch andere, vllt. bessere Lösungen? Wenn ja, welche wären das? Bin für Beispiele und Links dankbar. Bin noch sehr neu in C#, weiss daher nicht was da am besten wäre und will nicht einen falsch Weg wählen.

    Danke für Eure Hilfe.
     
    Wenn euch mein Beitrag weiterhilft, bitte bewerten

  2. #2
    Erik Erik ist offline Mitglied Gold
    Registriert seit
    Jul 2008
    Beiträge
    171
    Hi,

    Wenn du mehrere Clienten gleichzeitig hast solltest du für jeden einen Thrad verwenden. Schau dir mal dieses Beispiel an. Dort wird eine ArrayList mit allen Clienten angelegt http://msdn.microsoft.com/de-de/library/bb979208.aspx.
    Du musst die ServerThread-Klasse nur noch ein wenig erweitern und dann kannst du die ArrayList durchlaufen und an alle Daten verschicken.

    Gruß
    Erik
     

  3. #3
    Avatar von desaster0505
    desaster0505 desaster0505 ist offline Mitglied Gold
    Registriert seit
    Dec 2006
    Ort
    Lampertheim
    Beiträge
    185
    Hi!

    Der Link macht einen guten Eindruck. Ich lese mich da mal durch und probiere es, ob ich damit weiterkomme.
     
    Wenn euch mein Beitrag weiterhilft, bitte bewerten

  4. #4
    Avatar von desaster0505
    desaster0505 desaster0505 ist offline Mitglied Gold
    Registriert seit
    Dec 2006
    Ort
    Lampertheim
    Beiträge
    185
    Hi!

    ich habe mittlerweile den Link oben und noch paar andere anschaut zwecks Text versenden und mein Programm startet nun auch als Server mit einem Knopfdruck und kann sich auch mit sich selbst als Client verbinden auf Knopdruck und per IP-Angabe.
    Das habe ich mir durch den Process-Explorer visualisieren und validieren lassen

    Ich schaffe es nur nicht, jetzt irgendwie Text an das Programm selbst zu senden. Schließlich soll später noch jemand anderes das Programm bekommen. Einer muss dann der Server sein und die anderen kriegen seine IP und der Server schickt den text von jedem an jeden. Und wenn einer mal nicht da ist, dann spielt ein anderer User mit dem Programm halt den Server und so weiter.

    Wenn ich jetzt mit NetworkStream clientStream = client.GetStream(); auf den Netzwerkstream zugreifen will steigt mein Programm im Debugmodus einfach aus.. heißt das Programm an sich läuft auch, aber ich kann mit dem Debugger nicht mehr Debuggen.. in Visual C# Express verschwindet die gelbe Zeile :-| . Ich weiss jetzt nicht ob das Programm so funktioniert,also Text sendet oder nicht.

    Hoffe mir kann jemand sagen, was das Problem ist.. habe jetzt Stunden damit verbracht und komme nicht darauf..
    Habe den interessanten Part als Code mal hier reingesetzt.. sieht viel aus, aber mich interessiert nur warum das Getstream nicht funktioniert bzw. was ich da falsch mache.

    Also ich starte das Programm als Server:

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
     private void button1_Click(object sender, EventArgs e)
            {
               
                    // Listener initialisieren und starten
                try
                {
                  
                    st = new ServerThread();
                    Thread th = new Thread(new ThreadStart(st.thread_starten));
                    th.Start();
                 
                    
                }
                catch (Exception ex) 
                { 
               MessageBox.Show(ex.Message);
                
                }
            
               }

    Das ist der Thread..der gestartet wird. Interessant ist hier erstmal die While-Schleife.. das funktioniert auch soweit mit der Verbindung herstellen.

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    
     class ServerThread
        {
           
     
            // Stop-Flag
            public bool stop = false;
            // Flag für "Thread läuft"
            public bool running = false;
            
            TcpListener listener = new TcpListener(IPAddress.Any, 4711);
                    // Listener starten
                    
            // Die Verbindung zum Client
            TcpClient tcpClient = null;
            Thread clientThread;
            String Hand;    
            bool loop = true;
       
            // Der eigentliche Thread
            public void thread_starten()
            {
     
                try
                {             
                    // Listener starten
                    listener.Start();
     
                    while (loop)
                    {
             
                       TcpClient tcpclient = listener.AcceptTcpClient(); 
                       running = true;      
                       Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
                       clientThread.Start(tcpclient);
                    }
     
                    NetworkStream clientStream = tcpClient.GetStream();
                    ASCIIEncoding encoder = new ASCIIEncoding();
                    byte[] buffer = encoder.GetBytes("Hello Client!");
                    clientStream.Write(buffer, 0, buffer.Length);
                    clientStream.Flush();
                  
                           
                }
                catch (Exception)
                {
     
     
                }
     
              
     
     
     
            }
     
     
            private void HandleClientComm(object client)
            {
                TcpClient tcpClient = (TcpClient)client;
                NetworkStream clientStream = tcpClient.GetStream();
     
                byte[] message = new byte[4096];
                int bytesRead;
     
                while (true)
                {
                    bytesRead = 0;
     
                    try
                    {
                        //blocks until a client sends a message
                        bytesRead = clientStream.Read(message, 0, 4096);
                    }
                    catch
                    {
                        //a socket error has occured
                        break;
                    }
     
                    if (bytesRead == 0)
                    {
                        //the client has disconnected from the server
                        break;
                    }
     
                    //message has successfully been received
                    ASCIIEncoding encoder = new ASCIIEncoding();
                    System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
                }
     
                tcpClient.Close();
     
              
            }
       }

    Die Verbindung stelle ich mit der gleichen Instanz des gleichen Programms her über einen Button dessen Code lautet:

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
      try
                {
                    Server_IP = txt_server_ip.Text;
                    // Client initialisieren und mit dem Server verbinden
                    //TcpClient server = new TcpClient(Server_IP, 4711);
                    // Stream für lesen und schreiben holen
                  
     
                    IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(Server_IP), 4711);
                    TcpClient client = new TcpClient(serverEndPoint);
                    client.Connect(serverEndPoint);
     
                    NetworkStream clientStream = client.GetStream();  //Hier steigt der Debugger einfach aus 
     
                    ASCIIEncoding encoder = new ASCIIEncoding();
                    byte[] buffer = encoder.GetBytes("Hello Server!");
     
                    clientStream.Write(buffer, 0, buffer.Length);
                    clientStream.Flush();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
     
                }


    Hoffe da blickt jemand durch... danke schonmal für eure Hilfe.
     
    Wenn euch mein Beitrag weiterhilft, bitte bewerten

Ähnliche Themen

  1. CSocket mit threads, mehrere Clients
    Von thekiller im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 26.02.10, 20:49
  2. Text an Prozesse schicken
    Von markado im Forum Java
    Antworten: 1
    Letzter Beitrag: 10.09.08, 09:26
  3. Socket, mehrere Clients
    Von UInt im Forum VisualStudio & MFC
    Antworten: 5
    Letzter Beitrag: 17.08.07, 10:38
  4. VPN Netzwerk und mehrere Clients
    Von xtratz im Forum Netzwerke
    Antworten: 1
    Letzter Beitrag: 14.10.05, 12:14
  5. mehrere Formulare überprüfen & Formular an iframe schicken
    Von olivergries im Forum Javascript & Ajax
    Antworten: 10
    Letzter Beitrag: 01.04.05, 08:38