2017-07-23 2 views
1

Dies ist meine erste Post und ich bin verzweifelt für eine Antwort. Ich versuche, eine Chat-Anwendung als Selbststudienprojekt zu erstellen, aber ich habe eine Sackgasse erreicht. Ich habe das simpletcp NuGet-Paket in Visual Studio 2015 verwendet, um dies zu erstellen. Jetzt wurde mein Code etwas verschleiert, so dass ich versuche, alles so klar wie möglich zu machen. Mein Problem ist, dass wenn ich mehrere Clients öffne, der Server alles korrekt empfängt, aber die Clients nur ihren eigenen Text sehen. Ich bin mir nicht sicher, wie ich eine Zeichenfolge vom Server an alle Chat-Clients zurücksende. Jede Hilfe wäre willkommen.C# -Client/Server-Chat-App mit SimpleTcp NuGet Paket

namespace ChattyCathy_v0._2_Client 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    SimpleTcpClient client; 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     client = new SimpleTcpClient(); 
     client.StringEncoder = Encoding.UTF8; 
     client.DataReceived += Client_DataReceived; 

    } 

    private void Client_DataReceived(object sender, SimpleTCP.Message e) 
    { 
     txtStatus.Invoke((MethodInvoker)delegate() 
     { 
      client.DataReceived += Client_DataReceived; 
      listBox1.Items.Add(e.MessageString); 
      e.ReplyLine(string.Format("You said: {0}", e.MessageString)); 
      e.ReplyLine(string.Format("\n" + loginName + " said: {0}", e.MessageString)); 

     }); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     client = new SimpleTcpClient().Connect(textBox1.Text, Convert.ToInt32(textBox2.Text)); 
     button1.Enabled = false; 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 

    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     String loginName = "Zack"; 
     listBox1.Items.Add("\nYou said: " + textBox3.Text); 
     client.WriteLineAndGetReply(loginName + " said: " + textBox3.Text, TimeSpan.FromSeconds(3)); 


    } 
} 

}

Und hier ist der Server-Code:

{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    SimpleTcpServer server; 
    private String loginName; 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     server = new SimpleTcpServer(); 
     server.Delimiter = 0x13; 
     server.StringEncoder = Encoding.UTF8; 
     server.DataReceived += Server_DataReceived; 

    } 

    private void Server_DataReceived(object sender, SimpleTCP.Message e) 
    { 
     txtStatus.Invoke((MethodInvoker)delegate() 
     { 
      listBox1.Items.Add(e.MessageString +"\n"); 
      e.ReplyLine(string.Format("\n" + loginName + " said: {0}", e.MessageString)); 

     }); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     if (server.IsStarted) 
     { 
      server.Stop(); 
     } 
    } 

    private void button1_Click_1(object sender, EventArgs e) 
    { 
     listBox1.Items.Add("Server Starting..."); 
     System.Net.IPAddress ip = System.Net.IPAddress.Parse(txtHost.Text); 
     server.Start(ip, Convert.ToInt32(txtPort.Text)); 
    } 
} 

}

Antwort

0

nicht sicher, ob Sie Ihre Antwort gefunden, aber wenn Sie verwenden server.BroadcastLine("your msg here") oder sever.Broadcast("your msg here"). Dieser Befehl sendet es an alle verbundenen Clients.