myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Netzwerktechnologien » Disskussion bzgl. der Client-Server-Komponente
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Disskussion bzgl. der Client-Server-Komponente

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
tom-essen tom-essen ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2140.png


Dabei seit: 15.05.2005
Beiträge: 1.815
Entwicklungsumgebung: VS.NET 2013
Herkunft: NRW


tom-essen ist offline

Disskussion bzgl. der Client-Server-Komponente

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Dieser Thread ist von mir als Diskussions-Ort für das folgende Tutorial gedacht:
 [Tutorial] Client-/Server-Komponente über TCP-Sockets, da dort ja nur die Mods Schreibzugriff haben.

Hier also bitte alles an Anregungen oder Kritik reindonnern :-)
10.06.2006 14:44 Beiträge des Benutzers | zu Buddylist hinzufügen
sypher sypher ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.06.2006
Beiträge: 22


sypher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ja, das ist gut... ich habe eine frage...

solch eine ähnliche programm-stuktur habe ich in einem Programm verarbeitet... allerdings dient es jetzt nur zu abfrage zwecken... ich möchte eine Funktiom einbauen, in der die user dieses programms miteinander kommunizieren können... also client-nr 4 will jetzt beispielsweise eine nachricht an client-nr 27 schicken...

1. muss eine ID oder logindaten erkennen
2. muss die ID mit den Clienten-nr abgleichen
3. die nachricht an diesen clienten senden*

*hiermit habe ich bedenken, dass es funktioniert

bevor ich mich jetzt ans große programmieren mache, wollte ich wissen, ob dies möglich ist...

im prinzip benutze ich das gleiche system (mehr oder weniger), nur dass die verbindung dauerhaft ist...

wäre nett, wenn mir das jemand sagen könnte...

Sypher
10.06.2006 22:58 Beiträge des Benutzers | zu Buddylist hinzufügen
Vido Vido ist männlich
myCSharp.de-Mitglied

avatar-1935.jpg


Dabei seit: 21.03.2006
Beiträge: 96
Entwicklungsumgebung: Visual Studios 2005
Herkunft: Schweiz, Basel


Vido ist offline MSN-Passport-Profil von Vido anzeigen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

Als erstes danke für das Tutorial! Wäre froh gewsen, wäre dies schon anfang Jahr hier online gewesen aber so habe ich mich selbst wohl noch tiefer mit diesem Thema befasst.

Ich habe dein Turtorial nun (nur) überfolgen, da ich meine CS-Struktur ganz an  http://www.microsoft.com/germany/msdn/li...p.mspx?mfr=true orientiere.

Sehe ich es richtig, dass du kein Thread Array erstellst, sobald eine Verbindung eingeht? Ich glaube nämlich dies ist der Schlüssel zur Kommunikation zwischen den verschiendenen Clients wie von mir und Sypher gewollt.

Ich glaube theoretisch kann man mittels invoke zwischen den Threads hin und her springen...
Wäre froh um Bestätigung oder Korrektur.
11.06.2006 01:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.464
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

kleiner administrativer Einschub:

Im Artikelforum kann man zwar als Benutzer keinen neuen Thread erstellen, aber man kann auf einen bestehenden Thread antworten (zumindest sollte es gehen). Deshalb hätte die Diskussion auch dort stattfinden können. Da ich aber durchaus sinnvoll ist, den Artikel für sich stehen zu lassen und die Diskussion auszulagern, habe ich den Artikel selbst geschlossen.

herbivore
11.06.2006 07:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tom-essen tom-essen ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2140.png


Dabei seit: 15.05.2005
Beiträge: 1.815
Entwicklungsumgebung: VS.NET 2013
Herkunft: NRW

Themenstarter Thema begonnen von tom-essen

tom-essen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Ich hol' jetzt mal ein wenig aus, um sicherzugehen, dass wir uns nicht falsch verstehen, also bitte nicht als Belehrung betrachten ;-) :

Also grundlegend ist diese Komponente nicht als Kommunikationsmöglichkeit zwischen Clients gedacht, sondern als kurzfristige Client-/Server-Kommunikation. D.h. ein Client greift kurzfristig auf Dienste eines Servers zu, kriegt evtl. noch eine Antwort, danach ist die Kommunikation beendet.

Was Vido und sypher ansprechen, ist eher eine Peer-to-Peer-Verbindung, ähnlich den Tauschbörsen oder Chat-Programmen, wo es nicht zwingend einen zentralen Server gibt, höchstens einige Knoten, welche die Verbindungen einleiten, sonst aber den Clients funktional "unterlegen" sind.

Bzgl. dieser Kommunikation und einer längerfristigen Client-/Server-Kommunikation, d.h. z.B. kein automatischer Abbau oder ein wesentlich höherer TimeOut-Wert habe ich als nächstes geplant, entweder als neues Tutorial oder als Fortsetzung zum o.g. Tutorial.
13.06.2006 22:31 Beiträge des Benutzers | zu Buddylist hinzufügen
Vido Vido ist männlich
myCSharp.de-Mitglied

avatar-1935.jpg


Dabei seit: 21.03.2006
Beiträge: 96
Entwicklungsumgebung: Visual Studios 2005
Herkunft: Schweiz, Basel


Vido ist offline MSN-Passport-Profil von Vido anzeigen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi tom

Zitat:
Was Vido und sypher ansprechen, ist eher eine Peer-to-Peer-Verbindung, ähnlich den Tauschbörsen oder Chat-Programmen, wo es nicht zwingend einen zentralen Server gibt, höchstens einige Knoten, welche die Verbindungen einleiten, sonst aber den Clients funktional "unterlegen" sind.

Nein ich spreche keine Peer-to-Peer Verbindung an. Ich möchte tatsächlich zwischen den Clients kommunizieren ohne, dass die miteinander direkt Verbunden sind. Ich habe dies nun realisiert und werde mitte Juli selbst ein kleines Turtorial dazu veröffentlichen.

Hier eine kleines Preview:

C#-Code:
// Erstelle ein Array in dem die Verbindung erstellt werden
private static ArrayList threads = new ArrayList();

// Neuen Client IM Array instanzieren. Dabei übergebe ich den TCPClient
threads.Add(new InClient(c));


// Das kommunizieren zwischen den Clients läuft in einer Schleife ab:
foreach (InClient inclient in threads)
{
       inclient.sende_nachricht("hallo");
}

Selbstverständlich ist dies nur die Grundlage! Man muss noch mit Abfragen ob es der richtige Client ist, etc...
15.06.2006 10:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sypher sypher ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.06.2006
Beiträge: 22


sypher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ahh, evt. hilft mir das schon weiter...
ich tüftel mal nen bissle...

wenn nicht, dann freue ich mich schon auf das tutorial...

danke für eure hilfen!

Sypher
16.06.2006 14:07 Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mein Tipp: Das ist von den Anforderung de facto identisch mit einem klassischen Multi-User-Chat. Und Netzwerk-Chats in .NET gibts wie Sand am Meer.... muss man nur nach googeln.

Bei "härteren" MU-Games müßte man sich schon eher um Performance (vielleicht UDP anstelle von TCP) Gedanken machen. High-Level-Protokolle wie WebServices würden dann auch ausscheiden.

Welche Technologie man in diesem Szenario einsetzt ist fast Wurscht. Gehen tut alles. Es ist nur ein Frage der Plattform und vielleicht der Sicherheit (Durchdringung von Firmen-Firewalls).

Die vermutlich einfachste Implementierung wäre über Remoting. Für den Rückkanal bieten sich dann Events (eine Nachricht an alle wie bei Chat) bzw. Delegates (gezielte Benachrichtigung eines Clients) an.

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von svenson am 16.06.2006 15:30.

16.06.2006 15:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Tosek Tosek ist männlich
myCSharp.de-Mitglied

avatar-255.gif


Dabei seit: 08.06.2006
Beiträge: 38
Entwicklungsumgebung: VS 2005 Professional Edition
Herkunft: Gelsenkirchen


Tosek ist offline

läuft nicht stabil

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich habe die Komponente ausprobiert.
Das Senden der kleinen Nachricht scheint einwandfrei zu funktionieren.

Leider bekomme ich immer beim Senden der großen Message einen Übertragungsfehler. Nach dem Übertragungsfehler hängt die Komponente und läßt sich nur noch abschiessen.

Gibt es mittlerweile eine aktualisierte Version bzw. was könnte bei mir falsch laufen? (Ich probiere Client und Server direkt auf dem gleichen Rechner (per 127.0.0.1)) Von 10x funktioniert die große Nachricht 1x und 9x nicht.

Gruß
Torsten

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tosek am 11.07.2006 14:47.

11.07.2006 13:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.721
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer


Rainbird ist offline

Sicherheit

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie sieht es denn mit Sicherheit aus? Remoting bietet z.B. Windows-Authentifizierung über SSPI an.

Wie kann ich die Identität des Client-Benutzers am Server überprüfen?
12.07.2006 07:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
iceboy
myCSharp.de-Mitglied

Dabei seit: 20.12.2004
Beiträge: 7
Entwicklungsumgebung: VS .NET


iceboy ist offline

Abort?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

hab das mal ausprobiert und für gut befunden Augenzwinkern
nein, finde es echt klasse, auch die Idee die dahinter steckt. jedoch kann ich die ServerGui nicht beenden, die Form schloss sich zwar aber der prozess (insgesamt 3 Threads) wurde nicht beendet.

kennt ihr das Problem?

MfG
ice
22.07.2006 00:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tom-essen tom-essen ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2140.png


Dabei seit: 15.05.2005
Beiträge: 1.815
Entwicklungsumgebung: VS.NET 2013
Herkunft: NRW

Themenstarter Thema begonnen von tom-essen

tom-essen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Also:
Bzgl. der grossen Nachrichten werd' ich dass demnächst nochmal überprüfen, hab' allerdings grad' noch ein paar Prüfungen.
Wie gross sind den die Daten? Ich hatte es mal mit 2MB probiert, da hat's funktioniert.
Aber wenn's nicht funktioniert, weis ich evtl. schon, woran es liegt: Die Daten müssen fragmentiert werden, da die Socket-API nur einen begrenzten Puffer hat ( ich glaub' 16KB ). Leider hab' ich keine Möglichkeit gefunden, diesen Wert abzufragen.
D.h. liegt der Fehler wahrscheinlich beim Senden der Nachricht.
Aber wie gesagt: Ich prüfe das ....

Bzgl. der "Unmöglichkeit", die ServerGui zu schliessen, liegt dies einfach nur daran, dass die Threads für die Client-Verbindungen nicht beendet werden.
Dies muss man explizit durchführen, wobei ich da mittlerweile ein wenig verändert habe.
Ich werd' auch dass nochmal neu ausarbeiten, und dann das vorhandene Tut. erweitern.

Aber vergebt mir, wenn ich mich bei dem Wetter nicht ganz so beeile ;-)
23.07.2006 15:15 Beiträge des Benutzers | zu Buddylist hinzufügen
YLIREBUS
myCSharp.de-Mitglied

avatar-1979.jpg


Dabei seit: 11.01.2006
Beiträge: 56
Entwicklungsumgebung: Visual Studio 2012/2013
Herkunft: Wolfsburg


YLIREBUS ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich freue mich schon auf das erweiterte TUT ;-).
großes Grinsen

//Edit

Interessant fände ich z.B. wie ich größere, binäre Datein verschicke (mehrere hintereineander) und die Gegenstelle diese ordnungsgemäss empfängt und speichert ;-).


Ich habe einfach mal folgendes probiert :

C#-Code:
if (mem.Length>0)
                {
                    if (mem.Length==4)
                        if (System.Text.Encoding.ASCII.GetString(mem.ToArray(),0,4)=="quit")
                        {
                            instanceOfClass.closeConnection();
                            break;
                        }
                    //Console.WriteLine("send {0} bytes",mem.Length);
                    instanceOfClass.Receive(mem.ToArray());

                    // Von mir------------------------------------
                    image = Image.FromStream(mem);
                    image.Save(@"F:\TESTBILD.jpg"); //ca 2,5MB
                    // Von mir ENDE ------------------------------

                    mem.Seek(0,SeekOrigin.Begin);
                    mem.SetLength(0);
                    TimeOut=0;
                }

und auf client Seite :

C#-Code:
private void SendeBild_Click(object sender, EventArgs e)
        {
            MemoryStream mem = new MemoryStream();
            BilderBox1.Image.Save(mem,ImageFormat.Jpeg );
            byte[] rawData = mem.ToArray();
            client.send(rawData);
        }

Das Bild kommt nur teilweise an ;-(.

Wie kann man sowas ralisieren ?

Später sollen dann auf Client seite in einer Schleife mehrere Bilde hintereinander geschickt werden.

Wie halte ich die Streams auseinander ?
In einem Buffer, der gesendet wird kann doch auch mal das Ende des Einen Bildes und der Anfang des nächsten Bildes sein oder sehe ich da was falsch ?

Habe mal irgend was aufgeschnappt, das man dann erst die Größe schickt und dann
den Stream.

Dann schicke ich die Größe meinetwegen '20000000' , danach das Bild , so jetzt kommt ein Buffer an , wo 20000000 drinn steht und danach die Bildinformation wie weiss ich wie weit meine Größe in dem Buffer geht ?

Baue ich mir selber Trennzeichen ein ?
Mache ich auf Client Seite eine Pause, damit ich in den Timeout vom Server laufe ?




Danke

Ylirebus

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von YLIREBUS am 01.08.2006 11:03.

01.08.2006 10:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 6 Monate.
River River ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.01.2007
Beiträge: 6
Entwicklungsumgebung: VS 2005 - C# Express
Herkunft: Dortmund


River ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, erstmal vielen Dank für das tolle Tutorium.

Ich hab allerdings eine Frage, bzw. ein Problem auf der Server-Seite. Das der Server in einer Schleife auf eingehende Client-Verbindungen warten muß, ist mir klar. Und das man das ohne das Programm zu blockieren in einem Thread durchführen sollte, ist auch verständlich. Ich bin nur über folgende Codezeilen verwundert:

C#-Code:
       listener.Start();
        // Solange Clients akzeptieren, bis das
        // angegebene Maximum erreicht ist
       while (true)
        {
            while (!listener.Pending()) {Thread.Sleep(sleepTime);}
            Socket newSocket = listener.AcceptSocket();
            if (newSocket != null)
            {
                // Mitteilung bzgl. neuer Clientverbindung
                System.Console.WriteLine("Neue Client-Verbindung ("+
                    "IP: "+newSocket.RemoteEndPoint+", "+
                    "Port "+((IPEndPoint)newSocket.LocalEndPoint).Port.ToString()+")");
                serverInstance newConnection = new serverInstance(newSocket);
                Clients.Add(newConnection);
            }
        }

Das abhören geschieht über eine while(true) Schleife, ohne Abbruchbedingung (dafür allein sollte man doch jemanden steinigen, oder??). Und daher resultiert mein Problem. Beim Schließen meines Programms läuft offensichtlich diese Schleife weiter (ich hab im Taskmanager gesehen, dass der Prozess beim beenden des Programms nicht geschlossen wird). Der zugehörige Thread geht in den Status WaitJoinSleep (ohne Gewähr). Bau ich Testweise eine Abbruchbedingung in die Schleife ein, wird alles ordnungsgemäß beendet.
zb.

C#-Code:
listener.Start();
        // Solange Clients akzeptieren, bis das
        // angegebene Maximum erreicht ist
       int counter = 0;
       while (counter<5)
        {
            while (!listener.Pending()) {Thread.Sleep(sleepTime);}
            Socket newSocket = listener.AcceptSocket();
            if (newSocket != null)
            {
                // Mitteilung bzgl. neuer Clientverbindung
                System.Console.WriteLine("Neue Client-Verbindung ("+
                    "IP: "+newSocket.RemoteEndPoint+", "+
                    "Port "+((IPEndPoint)newSocket.LocalEndPoint).Port.ToString()+")");
                serverInstance newConnection = new serverInstance(newSocket);
                Clients.Add(newConnection);
                counter++;
            }
        }

Diese Bedingung beendet die while Schleife wenn 5 Clients sich angemeldet haben. Aber das ist ja nicht Sinn des Servers.
Also wie sollte man sauber diesen Thread /Schleife verlassen? Ruf ich Thread.Abort() auf, wechselt der Status in WaitSleepJoin / Abort Requested.... und nix passiert.

Taner
20.02.2007 15:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Entweder du schiesst den Thread per Abort() ab, oder du definierst ihn als Background-Thread, dann macht das .NET automatisch bei App-Ende. Eine simple Abbruchbedingung im While reicht jedenfalls nicht, weil AcceptSocket()-Socket ja blockiert. Die Beendigung des Threads würde also nur dann Eintreten, wenn sich ein neuer Client verbunden hat. Dritte Möglichkeit ist BeginAcceptSocket in Kombination mit einem Sync-Objekt, welches den Abbruch signalisiert.
20.02.2007 15:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
River River ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.01.2007
Beiträge: 6
Entwicklungsumgebung: VS 2005 - C# Express
Herkunft: Dortmund


River ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für die Antwort. Also ein paar Möglichkeiten hast du mir ja jetzt aufgezählt. Allerdings frag ich mich, wieso das im Tutorial nicht erwähnt, oder dann anders gemacht wurde.

Gruß, Taner


PS: Der Fehler lag bei meinem Code ..., und ich will dem Autor des Tutorial auch nix vorwerfen :-) Ich freu mich über jedes gut geschriebenes Tutorial.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von River am 20.02.2007 17:45.

20.02.2007 16:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der freundliche Mensch, der das Tutorial geschrieben hat, wird sich sicher über Verbesserungsvorschläge freuen.
20.02.2007 17:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Monate.
justin.caseof justin.caseof ist männlich
myCSharp.de-Mitglied

Dabei seit: 21.05.2007
Beiträge: 4


justin.caseof ist offline

Problem: auf Win CE 4.2 mit CF 1.0 SP3

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hi!

ich sitz hier verzweifelter art und weise an ner client-server-anwendung:
ein gerät ist ein normaler pc und dazu kommt noch ein pda mit nem windows ce 4.2 dotNet (CF 1.0 SP3 soweit ich weiß).
(btw: ich habe schon mehrere erfolgreiche anwendungen für dieses gerät geschrieben...bin also nicht grad n newbee in der materie)
ich habe das beispiel hier ausm forum erfolgreich auf dem pc compiliert und ausprobiert.
ich kann auch ohne probleme server und client auf dem pda laufen lassen.
ABER:
sobald ich vom pda (client) auf den server (pc) zugreifen will, kommt ne socketexception geflogen. (hab auch schon andere socket-examples ausprobiert)

firewalls ist aus. geräte können sich untereinander anpingen. WAS MACH ICH FALSCH??? so langsam verlier ich jegliches vertrauen in mich selbst *möööp*

ich bin über alle hinweise sehr dankbar!

mfg, der tobi



[edit]
wenn der server auf dem pda läuft, dann kann ich mich connecten!!! ist da irgendwas auf dem pda, was nen verbindungsaufbau nach außen verhindert?
mit dem internet-explorer (aufm pda) kann ich auf den pc zugreifen.
wenn die client-server-anwednung über port 80 geht, funktioniert's trotzdem nicht.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von justin.caseof am 24.05.2007 13:08.

24.05.2007 12:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Über welche Strecke gehst du? ActiveSync, WLAN, Bluetooth?
24.05.2007 13:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
justin.caseof justin.caseof ist männlich
myCSharp.de-Mitglied

Dabei seit: 21.05.2007
Beiträge: 4


justin.caseof ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

oh sry...ganz vergessen: es ist ne wlan verbindung.
kann es denn daran liegen? weil die geräte sich ja anpingen können.
24.05.2007 13:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Gabs da nicht was mit Work, Internet noch was anderes in den Netzwerkeinstellungen von Pocket PC? Schraub doch da mal rum. Ansonsten riecht das normalerweise sehr nach Firewall.
24.05.2007 13:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
justin.caseof justin.caseof ist männlich
myCSharp.de-Mitglied

Dabei seit: 21.05.2007
Beiträge: 4


justin.caseof ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich bin auch erst von firewall ausgegangen, aber da ist echt nichts am laufen.
-->mit iexplorer (auf pda) zum pc geht irgendwas (der server checkt was), aber mit der client anwendung aufm pda zu serverport 80 aufm pc geht nix.

ich erschieß mich heut noch *mööp*


[edit]
die sache läuft immernoch nicht...
es MUSS an der .Net Socket geschichte für das compact framework liegen. was anderes kann ich mir nicht erklären. firewall ist deshalb quatsch weil ja socketverbindungen vom iexplorer (auf pda) aus funktionieren und nur nicht mit meinem programm bzw. der testanwendung hier ausm forum. außerdem kann ich mich wenn der pda server ist auch zu ihm connecten.
ich probier morgen mal das CF 2.0 aus...wenn's denn auf CE 4.2 läuft...da hab ich noch keinen plan.

[nochma_edit]
java sockets laufen!!! es is echt 100% die Socket geschichte vom .Net CF!

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von justin.caseof am 24.05.2007 16:47.

24.05.2007 13:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
janismac janismac ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.03.2007
Beiträge: 183


janismac ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hallo

bei mir funktioniert das garnicht (ich benutzte die version von tom-essen)
hab beide programme auf dem gleichen pc laufen
der Server läuft in der Schleife vor sich hin
aber der client bleibt in der Connect methode hängen und gibt nach etwa 4 sek eine ausnahme raus.
firewall kanns nicht sein (hab keine)
vllt ist es windows schuld (diese version hat des-öfteren macken, vorallem wenn es um netzwerk dinge geht)

ich werd mal an nem anderen PC gugen ob es da läuft

aber vllt kennt einer das problem und weiß abhilfe

MfG janismac

EDIT:

habs mal an nem anderen PC ausprobiet, klappt auch nicht
was ist falsch????

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von janismac am 06.06.2007 17:58.

06.06.2007 12:00 Beiträge des Benutzers | zu Buddylist hinzufügen
tom-essen tom-essen ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2140.png


Dabei seit: 15.05.2005
Beiträge: 1.815
Entwicklungsumgebung: VS.NET 2013
Herkunft: NRW

Themenstarter Thema begonnen von tom-essen

tom-essen ist offline

Client/Server-Komponente

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Da ich z.Zt. an einem Projekt arbeite, welches die C/S-Komponente verwendet, werd' ich mal versuchen, das Tutorial und die Komponente ein wenig zu überarbeiten und zu erweitern.
Kann allerdings etwas dauern, bin im schreiben nicht unbedingt der Fleißigste ...
10.06.2007 12:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
Kalleberlin Kalleberlin ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.06.2007
Beiträge: 165


Kalleberlin ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich glaube ich bin doch ein wenig dämlich enttäuscht .

Ich hab mir das Tutoiral heruntergeladen, und wollte anfangs eigentlich nichts anderes machen als auf der ServerGui, in einer richTextBox, alle vorgänge "mitloggen" zu lassen.

Ich dachte eigentlich das ich das "ganz einfach" über

C#-Code:
server = new Server(typeof(ServerGui.server_class));
server.status.messageEvents += new MessageEvent(status_messageEvents);

realisieren kann, allerdings seh ich in der rtb dann nur den Namespace namen "Server.Gui" verwundert .


Kann mir jemand vielleicht auf die Sprüngen helfen?


Gruß Kalleberlin
10.07.2007 20:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 2 Monate.
Speedy_92 Speedy_92 ist männlich
myCSharp.de-Mitglied

Dabei seit: 04.08.2007
Beiträge: 89
Entwicklungsumgebung: Visual Studio 2010


Speedy_92 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hey.
Also ich finde das Tutorial ist echt spitze Daumen hoch

Allerdings hakt es bei mir an dieser Stelle:

C#-Code:
public Server(Type serverClass)
{
    Type it = typeof(serverInterface);
    // Zentralen Eventhandler registrieren
    status.messageEvents+= new MessageEvent(Server_MessageEvents);
    ...

Mein Problem ist, das ich bei status.message... nicht finde, wo status deklariert ist.
Ich finde auch nichts, was damit zu tun haben könnte.

Danke schon einmal im voraus.
Gruß Speedy_92
26.09.2007 10:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 2 Monate.
Komandar Komandar ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.08.2006
Beiträge: 9


Komandar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und ich bekomme folgende Fehlermeldung beim ausführen unter VS2008:

Zitat:
System.InvalidOperationException was unhandled
Message="Das Protokoll für die Quelle TcpServer kann nicht geöffnet werden. Möglicherweise haben Sie keinen Schreibzugriff."
Source="System"

Habe nichts verändert.
Wäre es möglich dass jemand das Tutorial für die Verhältnisse und Neuerungen in VS2008 und dem FW3.5 anpasst?

Danke schonmal.
18.12.2007 02:27 Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
SunboX SunboX ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.01.2005
Beiträge: 120
Herkunft: Vogtland


SunboX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hm, sehr nettes Tutorial. Funktioniert auch super! Nur ein Problem habe ich, wie entferne ich eine ServerInstanz aus dem "clients"-Array wenn der client die Verbindung trennt? Jetzt bekomm ich eine nullpointer exception.

thx SunboX
06.02.2008 00:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
wreid wreid ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.03.2008
Beiträge: 16
Entwicklungsumgebung: visual studio 2005
Herkunft: hesseland


wreid ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo an alle

ich bin neu in myCSharp.de, auch beschäftige ich mich seit kurzem mit C#. Und schon muss ich mich mit TCP Socket verbindung vertraut machen. Nun habe ich dieses Tutorial entdeckt, welches mir sehr viel verständlich gemacht hat. Leider muss ich sagen, dass der Quellcode, der dabei ist, nicht in VS 2005 compilieren lässt, und somit nicht lauffähig ist. Meine Bitte an Diejenigen, könnte mir jemand Quellcode Version für .Net 2005 zukommen lassen.

Ich habe es soweit in .Net 2005 konvertieren können, bloß der Server lässt sich nicht starten auch kann ich den Client mit Server nicht verbinden.

Gruß
11.03.2008 14:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 4 Monate.
mitchobrian
myCSharp.de-Mitglied

Dabei seit: 25.06.2008
Beiträge: 9


mitchobrian ist offline Füge mitchobrian Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hast du die IP Adresse geändert? smile

Gibt es mittlerweile eine neuer Tutorial für das Studio 2005.. oder einfach eine neue Struktur, ist ja doch ganz schön alt das Ding!
16.07.2008 23:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 6 Monate.
Thomas B Thomas B ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.08.2006
Beiträge: 223


Thomas B ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Ich versuche anhand des Tutorials einen kleinen Chatserver und einen Chatclient zu erstellen. Jedoch bekomme ich an der Stelle Probleme, wo die Socketverbindung an das Objekt serverInstance übergeben wird und dann in einer Collection gespeichert wird.

Bei mir führt das Übergeben an die ArrayList zu einem Verbindungsfehler.

C#-Code:
private void Listen()
        {
            TcpListener L = new TcpListener(this.mIpAddress, this.mPort);
            try
            {
                L.Start();
                while (!L.Pending())
                    Thread.Sleep(100);
                Client C = new Client(L.AcceptSocket());
                this.mClients.Add(C);
                this.OnSendMessage("Console: Client connected, IP: " + C.Connection.Socket.RemoteEndPoint + ", Port: " + ((IPEndPoint)C.Connection.Socket.LocalEndPoint).Port.ToString());
            }
            catch (Exception e)
            {
                throw new Exception("Fehler bei Verbindungserkennung", e);
            }

Meine ArrayList heißt mClients und beim Übergeben des Objekts Client (C) wird der Fehler ausgelöst der unten geworfen wird. Ohne die Collection funktioniert es wunderbar.

Hier noch die Client und Connection Klasse.

C#-Code:
// Client
class Client
    {
        private Connection mConnection;

        public Connection Connection
        {
            get { return this.mConnection; }
        }

        public Client(Socket pSocket)
        {
            this.mConnection = new Connection(pSocket);
        }
    }

// Connection
class Connection
    {
        private Socket mSocket;

        public Socket Socket
        {
            get { return this.mSocket; }
        }

        public Connection(Socket pSocket)
        {
            this.mSocket = pSocket;
        }
    }

Gruß Thomas


€: Ich habe den Fehler gefunden. Ich habe vergessen die ArrayList zu initialisieren...Schade, dass die Exception die eigentliche Fehlermeldung auf einen fehlenden Objektverweis überspielt.


Gruß Thomas

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Thomas B am 09.02.2009 11:06.

08.02.2009 17:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tt556789900
myCSharp.de-Mitglied

Dabei seit: 16.06.2008
Beiträge: 33


tt556789900 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Gutes Tutorial, ich selbst hab in C++ schon mal ein lauffaehiges Programm geschrieben, allerdings eher recht zu simpel und ohne jegliches Hintergrundwissen...

Deswegen hab ich auch diese, ich glaub sehr dumme Frage ^^'

C#-Code:
        /// <summary>
        /// Interner Event-Handler für alle Server-Meldungen, welche in die
        /// Ereignisüberwachung des aktuellen Systems geschrieben werden.
        /// </summary>
        /// <param name="Message">Die Mitteilung</param>
        private void Server_MessageEvents(string Message)
        {
            Log.WriteEntry(Message);
        }

ich bekomm bei Log.WriteEntry(Message); eine Exceoption:
System.Security.SecurityException was unhandled
Message="The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security."

Was mach ich falsch ? Ich hab das Projekt nicht veraendert. Liegt es vll daran, dass ich nicht Administrator auf dem Rechner bin?

Danke schonmal fuer die Hilfe
17.02.2009 02:32 Beiträge des Benutzers | zu Buddylist hinzufügen
Luth
myCSharp.de-Mitglied

Dabei seit: 20.02.2006
Beiträge: 36


Luth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Was mach ich falsch ?

Wahrscheinlich nichts. großes Grinsen

Ich hab den Tutorial-Code vor 3-4 Tagen selber mal ausprobiert und bekam die gleiche Nachricht. Ich rate jetzt einfach mal mit, das mit den neueren Frameworks oder Vista, irgendwelche neuen Sicherheitsbestimmungen zuschlagen. Nachdem ich zu blöd / faul war rauszufinden an was es lag, hab ich einfach statt dem angegebenen Log mein eigenes, auf Textdateien basierendes Log verwendet oder in die Console geschrieben. Das ging dann auch anstandslos.

Wenn du nicht unbedingt in die Ereignisüberwachung reinschreiben willst, schmeiß es einfach raus und schreib woanders rein.


Und an tom-essen nochmal ein Dankeschön für's zur Verfügung stellen des Tutorials.
17.02.2009 18:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tt556789900
myCSharp.de-Mitglied

Dabei seit: 16.06.2008
Beiträge: 33


tt556789900 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hab die Log.WriteEntry(Message); durch meine eigene Ausgabe ersetzt, funktionert auch...

danke fuer das Example, war sehr aufschlussreich fuer mich :)
18.02.2009 05:31 Beiträge des Benutzers | zu Buddylist hinzufügen
tt556789900
myCSharp.de-Mitglied

Dabei seit: 16.06.2008
Beiträge: 33


tt556789900 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich hab noch eine kleine Frage, wie kann ich von der Form aus, auf die Server_class.cs zugreifen und die Nachrichten vom Server empfangen ? Da ja die Klasse von ServerInstance in Server.cs aufgerufen wird, habe ich zwei unterschiedliche Instanzen wenn ich Server_class.cs in der Form deklariere und in einer Interface Klasse, kann ich ja keine statischen Variablen benutzen, bzw ein Event, da es von einem anderen Thread ausgeht...

wie komm ich trotzdem an die Daten heran? Danke fuer die hilfe vorab schon mal!

[EDIT]Hab das Problem nun teilweise, bzw notduerftig geloest indem ich bei serverinstance ein Event erstellt hab, das ich in Server aufruf und damit status.newMessage befuettere...

C#-Code:
                        serverInstance newConnection = new serverInstance(newSocket,x);
                        newConnection.messageEvents += new MessageEvent(newConnection_messageEvents);
                        Clients.Add(newConnection);

C#-Code:
        void newConnection_messageEvents(string Message)
        {
            status.newMessage(Message);
        }

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von tt556789900 am 20.02.2009 05:49.

20.02.2009 01:46 Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 8 Monate.
oliver1979 oliver1979 ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 77


oliver1979 ist offline

Wird IP-Adresse benötigt ?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Zusammen,

ich versuche gerade eine Kommunikation zwischen einer C# GUI und einem C Programm über Sockets herzustellen. Das ganze passiert auf dem gleichen PC.

Eine Grundlegende Frage wäre: Brauche ich dazu die IP-Adresse oder kann ich das direkt über den Port machen ?

Gesendet werden sollen Messdaten (2 Arrays) und Einstellungen (Einzelne Variablen). Was ist hierfür geeigneter ? TCP oder UDP ?


Ich hab mich hierzu schon teilweise eingelesen oder informiert, aber bin mir da nicht wirklich sicher. Wie lange werde ich für so etwas brauchen ? Ist das kompliziert ?

Grüße und Danke für die Hilfen
Oliver
10.11.2009 11:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Jahre.
da_user da_user ist männlich
myCSharp.de-Mitglied

Dabei seit: 21.08.2008
Beiträge: 90
Entwicklungsumgebung: VS 2015 Comunity
Herkunft: nähe Regensburg


da_user ist offline Füge da_user Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich kram dieses wohl relativ alte Thema wieder raus, da ich diese Client-Server-Komponente entdeckt und verwenden möchte.

Der Clientteil hat mich (zumindest bis jetzt) vor keine großen Herausforderungen gestellt, allerdings der Serverteil.

Hier ist ja auch der Teil in der ServerGUI relativ dürftig, besteht eigentlich nur aus der Zeile:

Code:
1:
server = new Server(typeof(ServerGUI.server_class));

Jetzt scheiterts schonmal daran, dass ich nicht weiß, was ich nach typeof eintippen soll, denn

Code:
1:
typeof(MeinProgramm.server_class)

gibt es nicht.

Auch frage ich mich, wie ich mit der Serverkomponente kommunizieren soll? Also wie bekomme ich mit, wenn eine neue Nachricht vom Clienten eingegangen ist, wie komme ich an diese und wie antworte ich dem Clienten dann?

Vielleicht kann mir ja der eine oder andere auf die Sprünge helfen. Mir würde evtl. sogar einfach schonmal der Quellcode zu einem Progrämmchen reichen, das einfach etwas mehr bietet als die ServerGUI, zum spicken halt ;-)

VG
Matthias
26.02.2013 18:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 6 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.11.2019 08:31