2009-05-05 3 views
-1

Betrachten Sie den Fall eines LAN-Boten, wo eine Reihe von Menschen online sind. Ich muss eine bestimmte Person auswählen, mit der ich chatten möchte. Wie muss ich in C# vorgehen? Ich möchte eine bestimmte Person auswählen, indem ich auf seinen Namen klicke. Danach muss alles, was ich tippe, gesendet werden, genau wie im Fall der IP Lanmessenger Software (in der Hoffnung, dass man sie benutzt). Konnte jemand mir helfen.ThanksWählen Sie eine Person mit C in Chat #

+1

Es hängt von so vielen Parametern ab, wie z. B. von welcher Steuerung Sie die Liste der Benutzer anzeigen, wie Sie die Kommunikation zwischen Clients implementiert haben und vieles mehr. Ich denke, dass Sie einige Details geben müssen, um einige gute Antworten zu erhalten. –

Antwort

0

Wenn Sie die Benutzeroberfläche für einen Chat erstellen und Sie alle Menschen online sehen möchten, wäre das typische UI-Element ein Listenfeld und dann Code, der auf dem On_Click eines Elements ausgelöst wird in der BOx. Dieser Code könnte ein anderes UI-Element zum Starten des Chats öffnen.

Das Abrufen der Liste der angemeldeten Benutzer ist schwieriger. Sie müssen eine Art Observer/Subscriber-Muster implementieren, um Benachrichtigungen aus dem von Ihnen implementierten Chat-Protokoll zu verarbeiten.

GeekPedia hat eine großartige Serie auf creating a chat client and server in C#.

+0

Können Sie mir bitte den Namen des Ereignisses mitteilen, das ausgelöst wird, wenn auf ein Element in der Listbox geklickt wird. Ich weiß, dass der Name des Ereignisses auf dem Code On_Click sein soll, aber wie lautet der Name in der Ereignisliste in der Eigenschaften-Symbolleiste? Danke – Avik

+0

Ich glaube nicht, dass Sie On_Click wollen, wahrscheinlich möchten Sie SelectedIndexChanged. –

3

Wenn Sie die Benutzer verfolgen wollen, empfehle ich, eine Serveranwendung zu codieren, die alle Verbindungen verarbeitet. Hier ist ein kurzes Beispiel (beachten Sie, dies ist kein komplettes Beispiel):

using System.Collections.Generic; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
using System.Threading; 

private TcpListener tcpListener; 
private Thread listenerThread; 
volatile bool listening; 

// Create a client struct/class to handle connection information and names 
private List<Client> clients; 

// In constructor 
clients = new List<Client>(); 
tcpListener = new TcpListener(IPAddress.Any, 3000); 
listening = true; 
listenerThread = new Thread(new ThreadStart(ListenForClients)); 
listenerThread.Start(); 

// ListenForClients function 
private void ListenForClients() 
{ 
    // Start the TCP listener 
    this.tcpListener.Start(); 

    TcpClient tcpClient; 
    while (listening) 
    { 
     try 
     { 
      // Suspends while loop till a client connects 
      tcpClient = this.tcpListener.AcceptTcpClient(); 

      // Create a thread to handle communication with client 
      Thread clientThread = new Thread(new ParameterizedThreadStart(HandleMessage)); 
      clientThread.Start(tcpClient); 
     } 
     catch { // Handle errors } 
    } 
} 

// Handling messages (Connect? Disconnect? You can customize!) 
private void HandleMessage(object client) 
{ 
    // Retrieve our client and initialize the network stream 
    TcpClient tcpClient = (TcpClient)client; 
    NetworkStream clientStream = tcpClient.GetStream(); 

    // Create our data 
    byte[] byteMessage = new byte[4096]; 
    int bytesRead; 
    string message; 
    string[] data; 

    // Set our encoder 
    ASCIIEncoding encoder = new ASCIIEncoding(); 

    while (true) 
    { 
     // Retrieve the clients message 
     bytesRead = 0; 
     try { bytesRead = clientStream.Read(byteMessage, 0, 4096); } 
     catch { break; } 

     // Client had disconnected 
     if (bytesRead == 0) 
      break; 

     // Decode the clients message 
     message = encoder.GetString(byteMessage, 0, bytesRead); 
     // Handle the message... 
    } 
} 

nun wieder beachten Sie dies nicht ein vollständiges Beispiel ist, und ich weiß, dass ich irgendwie alle auf das ging, aber ich hoffe, das gibt Ihnen ein Idee. Der Nachrichtenteil in der HandleMessage-Funktion kann die Benutzer-IP-Adresse sein, wenn sie eine Verbindung mit dem Chat-Server/Trennen herstellen, und anderen Parametern, die Sie angeben möchten. Dies ist Code, der aus einer Anwendung stammt, die ich für die Firma meines Vaters geschrieben habe, damit sich die Mitarbeiter gegenseitig direkt aus dem benutzerdefinierten CRM, das ich geschrieben habe, melden können. Wenn Sie weitere Fragen haben, kommentieren Sie bitte.

Verwandte Themen