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