ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
672
672
EMPFEHLEN
-
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....
-
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 kontraproduktivGrüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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
-
Programm automatisch laufen lassen
Von Steusi im Forum .NET DatenverwaltungAntworten: 10Letzter Beitrag: 22.10.08, 13:02 -
Programm im Hintergrund laufen lassen...
Von thuglife im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 23.09.08, 18:24 -
Client-Server Kommunikation, suche Framework (z.B. MoM)
Von DarthShader im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 05.09.08, 08:56 -
Programm im Hintergrund laufen lassen?
Von rampage78 im Forum .NET Windows FormsAntworten: 0Letzter Beitrag: 22.12.07, 18:32 -
Programm im hintergrund laufen lassen
Von haubex im Forum JavaAntworten: 5Letzter Beitrag: 20.09.07, 15:37





Zitieren

Login





