2017-07-23 146 views
1

这是我的第一篇文章,我绝望的答案。我试图创建一个聊天应用程序作为一个自学项目,但我已经陷入了死胡同。我在Visual Studio 2015上使用了simpletcp NuGet包来创建它,现在我的代码已经被混淆了一些,所以我会尽可能地让所有的东西变得清晰。我的问题是,如果我打开多个客户端,服务器会正​​确接收所有内容,但客户端只能看到他们自己的文本。我不确定如何将字符串从服务器发送回所有聊天客户端。任何帮助,将不胜感激。C#客户端/服务器聊天应用程序使用simpletcp NuGet包

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)); 


    } 
} 

}

这里是服务器代码:

{ 
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)); 
    } 
} 

}

回答

0

不知道,如果你发现你的答案,但如果你使用server.BroadcastLine("your msg here")sever.Broadcast("your msg here")。 该命令将把它发送给所有连接的客户端。

相关问题