C# sockets programmieren

digitalmy

Grünschnabel
kann mir einer helfen, ich bräuchte ein Grundgerüst für eine Socketverbindung zu einem IRC server,
Protokoll Informationen hab ich, weiss nur nicht, wie ich eine Socket verbindung herstelle und die Antworten des Servers abfange,
bin in Sockets ein totaler newbie ;) und in c# eigentlich auch noch nicht allzu erfahren.
 
ich halt nix von google, such nur über msn und da hab i net viel hilfreiches gefunden ;) aber danke trotzdem ;))

aber ich check des net so ganz mit dem abfangen von nachrichten, ich brauch ja ein event, des ausgelöst wird, sobald ich ne nachricht vom server bekomm, wie funkt des?
 
Zuletzt bearbeitet:
ok, ich hab das jetzt mal soweit gelöst, aber ich hab ne schleife gemacht:

Code:
while (true)
{
	Console.WriteLine(streamReader.ReadLine());
}

und des funktioniert und selbst wenn ich z.B. Console.WriteLine("bla") noch als 2. befehl in die schleife schreib wird des bla nur geschrieben, wenn eine message vom server ankommt und angezeigt wird, des isch voll komisch, eigentlich müsste der die schleife doch ununterbrochen ausführen, tut er aber net, der führt die irgendwie nur aus, wenn ne msg ankommt, also eigentlich wie ein event, isch zwar gut so, aber des kann doch net sein, des kann der compiler doch gar net wissn *ggg* also was steckt dahinter?
 
Wenn man programmiert, sollte man flexibel sein. Ist also über die MSN nichts finden (was mich net wundert), dann muss halt ein anderes Medium herhalten. Ist ja net so schwierig. Immerhin müssen hin und wieder ja auch Dinge programmiert werden, die einem net so taugen, warum also net auch dort suchen wos einem net taugt, man aber wenigstens ordentliche Ergebnisse erhält.

Du wirst das ganze über den TcpListener machen. Das Teil liefert einen Stream, den du in einer Schleife abfangen kannst. Hier kannst Du das normal durchlaufen lassen, oder Du übergibst es einem Event, wie auch immer.

In meinem Fall läuft das ganze über Threads (bitte in der MSDN einlesen).

Hier hast mal einen funktionierenden Client. Schau Dir die vorhandenen Klassen und Methoden mal genau an. Wenn Du zu Events etwas lernen willst, dann informier dich über Delegate und Eventhandler. Hier kannst Du mal die MSDN durchforsten, was ja eigentlich ohnehin der erste Anlaufsprunkt für einen .NET-Programmierer sein sollte.

Code:
using System.IO;
using System.Net;
using System;
using System.Threading;
using N = System.Net;
using System.Collections;
using System.Windows.Forms;
using System.ComponentModel;
using System.Runtime.InteropServices;

class TalkUser {
   
   static Form talk;
   static N.Sockets.TcpClient TC;

   [DllImport("kernel32.dll")]
   private static extern void ExitProcess(int a);
   
   public static void Main() {
       talk = new Form();
       talk.Text = "TalkUser - The OFFICIAL TalkServ Client";
       talk.Closing += new CancelEventHandler(talk_Closing);
       talk.Controls.Add(new TextBox());
       talk.Controls[0].Dock = DockStyle.Fill;
       talk.Controls.Add(new TextBox());
       talk.Controls[1].Dock = DockStyle.Bottom;
       ((TextBox)talk.Controls[0]).Multiline = true;
       ((TextBox)talk.Controls[1]).Multiline = true;
       talk.WindowState = FormWindowState.Maximized;
       talk.Show();
       ((TextBox)talk.Controls[1]).KeyUp += new KeyEventHandler(key_up);
       TC = new N.Sockets.TcpClient();
       TC.Connect("IP OF A SERVER HERE",4296);
       Thread t = new Thread(new ThreadStart(run));
       t.Start();
       while(true) {
           Application.DoEvents();
       }
   }
   
   private static void talk_Closing(object s, CancelEventArgs e) {
       e.Cancel = false;
       Application.Exit();
       ExitProcess(0);
   }
   
   private static void key_up(object s,KeyEventArgs e) {
       TextBox TB = (TextBox)s;
       if(TB.Lines.Length>1) {
           StreamWriter SW = new StreamWriter(TC.GetStream());
           SW.WriteLine(TB.Text);
           SW.Flush();
           TB.Text = "";
           TB.Lines = null;
       }
   }
   
   private static void run() {
       StreamReader SR = new StreamReader(TC.GetStream());
       while(true) {
           Application.DoEvents();
           TextBox TB = (TextBox)talk.Controls[0];
           TB.AppendText(SR.ReadLine()+"\r\n");
           TB.SelectionStart = TB.Text.Length;
       }
   }
}
 
Zuletzt bearbeitet:
digitalmy bitte verfasse deine Beiträge Netiquettenkonform.

Bitte achte unbedingt auf Deine Rechtschreibung, eine klare Fragestellung bzw. Antwort und eine sinnvolle Struktur. Beiträge mit durchgehender Kleinschreibung, Chatsprache und/oder mangelhafter Struktur werden kommentarlos gelöscht.
Mehr dazu findest Du in unserer Netiquette.

MfG,
Alex
 
Zurück