Autor Beitrag
philipp-schoene
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 25.05.12 15:27 
Hallo,

Ich möchte mich mal in das Thema Netzwerk mit C# einarbeiten. Mein Ziel ist es, dass ich ein Programm von mir übers Netz ansprechen kann. Ich hoffe, ich habe mir da nicht zuviel für den Anfang vorgenommen. (Als Beispiel würde erstmal auch ein Chat-Programm reichen)
ich habe in der Richtung nur vor Jahren mal was mit VB gemacht, aber weiß nicht mehr viel. Nur dass es mit Sockets war. Wie fange ich da am besten an? Alle Tutorials die ich gefunden habe, waren zu hoch für mich.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3951
Erhaltene Danke: 812

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Fr 25.05.12 15:38 
Hallo,

als Einstieg solltest du dir die Klassen TcpClient und TcpListener ansehen (diese sind etwas einfacher zu verwenden als die direkte Socket-Klasse).
Schau dir dazu auch mal die Kurztutorials unserer C-Sharp-Library an:
TcpClient: Asynchrones und Synchrones verbinden
TcpListener: Asynchrones und Synchrones verbinden
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 25.05.12 18:13 
Was ist der Unterschied zwischen TcpClient, TcpListener und Sockets?
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 28.06.13 20:36 
von MSDN habe ich folgenden Beispielcode:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
// Listener initialisieren
TcpListener listener = new TcpListener ( 4711 );
// Listener starten
listener.Start ();
// Warten bis ein Client die Verbindung wünscht
TcpClient c = listener.AcceptTcpClient ();
// An dieser Stelle ist der Listener wieder bereit, 
// einen neuen Verbindungswunsch zu akzeptieren
// Stream für lesen und schreiben holen
Stream inOut = c.GetStream ();
// Hier kann in den Stream geschrieben werden
// oder aus dem Stream gelesen werden
// Verbindung schließen
c.Close ();
// Listener beenden
listener.Stop ();


ich möchte den Server lauschen lassen, und das später wieder beenden. Ich weiß nicht wo ich was hinschreiben muss. Ich benutze eine Form Anwendung. Kann mir bitte jemand helfen?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3951
Erhaltene Danke: 812

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Sa 29.06.13 10:25 
Hallo,

damit die GUI weiterhin bedienbar bleibt, während der Listener horcht, solltest du diesen Code in einen eigenen Thread (bzw. für WinForms in einen BackgroundWorker packen).
Oder aber wie in den Tutorials beschrieben, die asynchrone Variante wählen.
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 29.06.13 16:39 
Irgendwie tue ich mich immer noch schwer. Ich habe mir das asynchrone Verfahren angesehen. Geht das nur über eine Klasse? Und mir ist noch nicht klar, wie die dann gesteuert wird. Aber um eine Klasse komme ich nicht herum, ist das richtig?

Ich habe folgenden Code. Leider bekomme ich schon einen Fehler, wenn ich das Programm beenden möchte.

ausblenden C#-Quelltext
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:
// Listener initialisieren
    TcpListener listener = new TcpListener(4711);

    public frmServer()
    {
      InitializeComponent();
    }

    private void btnServerStarten_Click(object sender, EventArgs e)
    {
      backgroundWorker1.RunWorkerAsync();
    }

    private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
    {
      // Listener beenden
      listener.Stop();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
      // Listener starten
      listener.Start();
      // Warten bis ein Client die Verbindung wünscht
      TcpClient c = listener.AcceptTcpClient();
    }
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 02.07.13 20:43 
Kann mir niemand helfen?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3951
Erhaltene Danke: 812

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mi 03.07.13 10:04 
Was für eine Fehlermeldung erhältst du denn?
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 03.07.13 19:15 
Eine direkte Fehlermeldung habe ich nicht. Ich wollte in die Thematik "Netzwerk" bzw "Netzwerkkommunikation" einsteigen, aber das ist kompliziert. Ich habe auch Probleme mit der GUI und Threads. Ich habe das mal mit Visual Basic 6. Aber das ist auch ein paar Jahre her. Da war es noch nicht so objektorientiert und es gab auch kein Threading. Deswegen der Hilferuf hier. Ich dachte mit einem einfachen Chatprogramm kann ich das lernen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3951
Erhaltene Danke: 812

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mi 03.07.13 19:31 
Hallo,

ich meinte diesen von dir beschriebenen Fehler
philipp-schoene hat folgendes geschrieben:
Leider bekomme ich schon einen Fehler, wenn ich das Programm beenden möchte.

Aber vllt. hilft dir ja Basic Client/Server Chat Application in C# .
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 03.07.13 19:41 
Das Beispiel sieht etwas umfangreicher aus. Wieso ist es so schwer mit der Kommunikation übers Netzwerk? zumindest empfinde ich das im Moment so.

Zitat:
System.Net.Sockets.SocketException wurde nicht von Benutzercode behandelt.
Message=Ein Blockierungsvorgang wurde durch einen Aufruf von WSACancelBlockingCall unterbrochen
Source=System
InnerException:


Das ist die Fehlermeldung, wenn ich den Server beende.