tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
672
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Blue_Fox Blue_Fox ist offline Mitglied Bronze
    Registriert seit
    Aug 2011
    Beiträge
    32
    Hi

    Ich hoffe mal ich schreib den post an die richtige stelle

    Was mach ich gerade:

    Ich will eine Steuerung mit einem Touchpanel bauen. Es soll spaeter mehrere Panels geben, die miteinander ueber UDP/TCP kommunizieren. UDP deshalb, weil die Panels die Adresse des Servers erst durch, den fuer die Aufgabe zustaendigen Server, erfahren. Auf dem Touchpanel soll die GUI und der Controller gleichzeitig laufen!! und das am besten in ein und dem selben Programm!!

    Soviel hab ich schon gemacht und gefunden:

    Oberflaeche arbeitet schon einwandfrei. Den Server und Client hab ich in extra Threads gepackt....

    Mein Problem:

    Mein UDP Server geht auf Listen und wartet, jetzy kommt mein UDP Client, unterbricht den ServerThread, Sendet seine Anfrage und wartet aufeine Antwort.... Die aber nie kommt, da ja der Serverthread noch unterbrochen ist!!

    Dann hab ich mal so im i-Net geschaut und bin auf den Backgroundworker gekommen, der aber in Compackt Framework 3.5 gar nicht existiert...

    Welche Funktion gibt es noch, mit der ich Server und Client gleichzeitig laufen lassen kann****

    MFG
    Blue_Fox

    PS: Sorry bin richtiger C# und .Net Anfaenger....
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi und herzlich willkommen auf tutorials.de

    Darf ich fragen, warum die Kommunikation zwischen beiden Parts über UDP und damit über Netzwerk geht?
    Der Sinn hinter so einer Architektur liegt darin, Server und Client auf getrennten Maschinen laufen zu lassen und über ein Netzwerk kommunizieren zu lassen. Die Kommunikation innerhalb einer Anwendung über das Netzwerk lauf zu lassen halte ich für sehr kontraproduktiv
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Blue_Fox Blue_Fox ist offline Mitglied Bronze
    Registriert seit
    Aug 2011
    Beiträge
    32
    Hi

    Ja da stimm ich dir zu...

    Aber spaeter soll es mehrere solcher Panels geben, von denen jedes eine GUI und ein Controller ist.... und jede Gui sollte auf jeden Controller zugreifen koennen...

    Da ist es einfacher gleich alles ueber das Netz zu machen (finde ich zumindest)...

    Einen ersten loesungsansatz hab ich jetzt schon!! funktioniert aber immer nur bei einer Datenuebertragung bei der 2. kommt nichts mehr an

    und zwar lasse ich nur den Server in einem extra Thread laufen und den Client etwa so...

    Das ist jetzt mein UDP Client (wurde nicht von mir so programmiert, ist glaub ich schongar von hier )

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    public string Udp_Client_All(string Room){
                    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
                    Udp_Client_Send(Room,sender);
                    string IpAddress = null;
                    IpAddress = Udp_Client_Receive(sender, Room);
                    return IpAddress;
            }
            // Send a Controller request for a special Room/Group
            private void Udp_Client_Send(string Room, IPEndPoint sender){
                Byte[] sendBytes = Encoding.ASCII.GetBytes(Room);
                udpClient.Send(sendBytes, sendBytes.Length, "255.255.255.255", 9050);
            }
            // Recives the IP Address and a Room/Group acknowledge
            private string Udp_Client_Receive(IPEndPoint sender, string Room){
                Byte[] receiveBytes = udpClient.Receive(ref sender);
                string Message = Encoding.ASCII.GetString(receiveBytes,0,receiveBytes.Length);
                string senderIP = sender.Address.ToString();
                if(Message == Room){
                    return senderIP;
                }
                else{
                    return null;
                }
            }

    Die initialisierung meiner Threads (Hauptkommunikation soll ueber TCP laufen)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    public void StartController(){
                Thread ControllerTCPServer = new Thread(new ThreadStart(StartTCPServer));
                Thread ControllerUDPServer = new Thread(new ThreadStart(StartUDPServer));
                ControllerUDPServer.Start();
                ControllerTCPServer.Start();
            }
            private void StartTCPServer(){
                tcpServer.TCP_Server_All(lights);
            }
            private void StartUDPServer(){
                udpServer.udp_Server_All(rooms);
            }

    und zum schluss noch der UDP Server
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    public void udp_Server_All(List<Room> rooms){
                UdpClient newsock = new UdpClient(ipep);
                ListenforMessage(rooms,newsock);
                //newsock.Close();              *MUSS ICH DEN WIEDER SCHLIESSEN ODER NICHT****
            }
            // Wait for any UDP-Recieve
            private void ListenforMessage(List<Room> rooms, UdpClient newsock){
                IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
                Message = newsock.Receive(ref sender);
                string Room = Encoding.ASCII.GetString(Message,0,Message.Length);
                int count = rooms.Count;
                for(int i=0; i<count; i++){
                    if(Room == rooms[i].GetRoomDesc()){
                        udp_Server_send(newsock, sender, Room);
                        break;
                    }
                }
            }
            // Send an Acknowledge
            private void udp_Server_send(UdpClient newsock, IPEndPoint sender, string Message){     
                data = Encoding.ASCII.GetBytes(Message);
                newsock.Send(data, data.Length, sender);
            }
        }

    So ich hoffe Ihr kenn euch aus...

    Kann das so gehen wie ich es mache****

    Wie gesagt bin nicht gut im programmieren, wenn einer irgendeinen Verbesserungsvorschlag hat bitte her damit!!

    MFG

    Blue_Fox
     

Ähnliche Themen

  1. Programm automatisch laufen lassen
    Von Steusi im Forum .NET Datenverwaltung
    Antworten: 10
    Letzter Beitrag: 22.10.08, 13:02
  2. Programm im Hintergrund laufen lassen...
    Von thuglife im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 23.09.08, 18:24
  3. Client-Server Kommunikation, suche Framework (z.B. MoM)
    Von DarthShader im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 05.09.08, 08:56
  4. Programm im Hintergrund laufen lassen?
    Von rampage78 im Forum .NET Windows Forms
    Antworten: 0
    Letzter Beitrag: 22.12.07, 18:32
  5. Programm im hintergrund laufen lassen
    Von haubex im Forum Java
    Antworten: 5
    Letzter Beitrag: 20.09.07, 15:37

Stichworte