c# - 制作聊天应用程序时模块“SimpleTCP”的问题
问题描述
所以我想用 C# 制作一个聊天应用程序,我看了一个关于它的视频(https://www.youtube.com/watch?v=ve2LX1tOwIM),我现在完全复制了代码但是当我运行服务器时,连接客户端到服务器并从客户端发送消息发生的情况是它无限地将消息发送到客户端和服务器。我不确定为什么会这样,因为代码与我观看的视频中显示的完全一样。您可以在我的存储库中看到这一点。
如果您想查看代码:客户端:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SimpleTCP;
namespace Client
{
public partial class ClientForm : Form
{
SimpleTcpClient client;
public ClientForm()
{
InitializeComponent();
}
private void ClientForm_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 ()
{
txtStatus.Text += e.MessageString;
e.ReplyLine(String.Format("You: {0}", e.MessageString));
});
}
private void SendMessageInput_Click(object sender, EventArgs e)
{
client.WriteLine(MessageInput.Text);
}
private void StartInput_Click(object sender, EventArgs e)
{
StartInput.Enabled = false;
client.Connect(HostInput.Text, Convert.ToInt32(PortInput.Text));
}
}
}
那就是服务器:
using System;
using System.Net;
using System.Text;
using System.Windows.Forms;
using SimpleTCP;
namespace HyperChat
{
public partial class ServerForm : Form
{
SimpleTcpServer server;
public ServerForm()
{
InitializeComponent();
}
private void ServerForm_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 ()
{
txtStatus.Text += e.MessageString;
e.ReplyLine(String.Format("You: {0}", e.MessageString));
});
}
private void StartButton_Click(object sender, EventArgs e)
{
txtStatus.Text += "Server Started...";
IPAddress ip = IPAddress.Parse(hostInput.Text);
server.Start(ip, Convert.ToInt32(portInput.Text));
StartButton.Enabled = false;
}
private void StopButton_Click(object sender, EventArgs e)
{
if (server.IsStarted)
{
server.Stop();
}
}
}
}
我真的很感激能得到帮助,我试着弄乱我的代码,但它并没有真正起作用,我想在视频中提到他们说你需要连接才能获得你想要连接的 IP:
System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text))
但它给出了错误,你真正需要做的是:
System.Net.IPAddress ip = System.Net.IPAddress.Parse(hostInput.Text);
我期望发生的是服务器按应有的方式发送消息,但由于某种原因它没有发送。我真的很感激能得到这方面的帮助。谢谢。
解决方案
推荐阅读
- r - 在 R 中使用 SparklyR 更改嵌套列名称
- excel - 如何显示最早时间
- javascript - 从边缘移除堆叠的线条
- google-app-engine - 多页 URL 后备 (index.html & subpage.html)
- apache - 在页面请求上运行外部命令
- tensorflow - 有没有办法在不同的 GPU 上运行批次的每个部分?
- css - CSS 网格在使用分数和屏幕尺寸百分比时创建不成比例的布局
- c - 如何保留稍后销毁的字符串的内容?
- c++ - 获取第一个模板参数的稳健方法
- ruby-on-rails - 在 Rails 中连接 API 时存储 JWT 的位置