000
06.03.2008, 13:14 Uhr
~MultiSocks
Gast
|
Hallo,
Code: |
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.IO; using System.Net.Sockets; using System.Threading;
namespace test { /// <summary> /// Description of MainForm. /// </summary> public partial class MainForm : Form { TcpListener tl = new TcpListener(81); public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); // // TODO: Add constructor code after the InitializeComponent() call. // } void Panel1Paint(object sender, PaintEventArgs e) { } public string Write (string text) { if (this.txtid.InvokeRequired) { this.txtid.Invoke((MethodInvoker)delegate() { this.txtid.Text += text + "\r\n" ; } ); } else { this.txtid.Text += text + "\r\n"; } return "done"; } void StartToolStripMenuItemClick(object sender, EventArgs e) { // Starte den Thread Thread[] ta = new Thread[10]; ta[1] = new Thread(new ThreadStart(listen)); ta[1].Start(); } public Socket handle_client (Socket insocket) { NetworkStream ns = new NetworkStream(insocket); StreamWriter sw = new StreamWriter(ns); StreamReader sr = new StreamReader(ns); sw.WriteLine("Accepted"); sw.Flush(); Write("Connection From: "+ insocket.RemoteEndPoint.ToString()); return insocket; } public void listen () { tl.Start(); Socket so = tl.AcceptSocket(); /*TcpListener tl = new TcpListener(81); tl.Start(); Socket so = tl.AcceptSocket();*/ if (so.Connected) { /*NetworkStream ns = new NetworkStream(so); StreamWriter sw = new StreamWriter(ns); StreamReader sr = new StreamReader(ns); sw.WriteLine("Accepted"); sw.Flush(); Write(so.RemoteEndPoint.ToString());*/ Thread[] th = new Thread[2]; th[1] = new Thread(new ThreadStart(listen)); th[1].Start(); handle_client(so); } } void MainFormLoad(object sender, EventArgs e) { } void CommandToolStripMenuItemClick(object sender, EventArgs e) { Form1 form1 = new Form1(); form1.Show(); } } }
|
Wie man anhand des Codes sieht, ist das ein Server der auf Port 81 nach eingehende Verbindungen horcht! Er ist multi threading fähig, da er für jede Connection einen eigenen Thread spawnt. Sprich es können auch 10 Clients gleichzeitig darauf verbinden. Was ich aber haben will ist, dass ich jeden Client einzeln killen kann, sprich die Verbindung zum Server terminieren.
Wie man sieht wir auf einer Form in einem Textfeld der Text "Connection From: IP Adresse und Port" angezeigt. Angenommen 10 Clients verbinden sich, dann sehe ich im Textfeld 10x "Connection From ... ..". Was ich nun will ist, dass ich auf einen Client in diesem Textfeld klicken kann (muss kein Textfeld sein kann auch ein Button sein) und dann eine Auswahl habe dem die Verbindung zum Server zu terminieren.
An was scheiterts? Bei mir scheiterts logisch daran, wie ich weiß mit welchem Thread ich kommunizieren muss. Für 10 Verbindungen werden ja 10 Threads geöffnet, nun ist eben die Frage wie weiß ich welcher Thread für welchen Client zuständig ist? Und wie kann ich diesem Thread dann sagen er soll dem Client z.B. den Text "Close_Connection" senden?
DAnke für die schnelle Hilfe LG |