所以我正在尝试创建一个使用 TcpClient 从服务器发送和接收数据的系统。我有一个线程正在侦听传入的数据。
我想要的是能够制作一种方法,它可以:
写入流 > 等待响应 > 处理响应
但与此同时,其他不相关的数据也可能在这段时间内进来,所以我不能这样做:
writer.WriteLine("");
string response = reader.ReadLine();
我在这个问题中查看“回调”> C# 中的回调,这似乎是我需要走的路,但我不完全确定如何继续此操作。
对此的任何帮助都会很棒,谢谢!
为吉姆米歇尔编辑:
这是我想要实现的目标:
public bool Login(string username, string password) {
writer.Write("{ \"username\" : \"" + username + "\", \"password\" : \"" + password + "\" }";
//Somehow get the response which is being ran on another thread (See below)
//Process the JSON into a object and check is successful or not
if (msg.result == "Ok") return true;
else return false;
}
private void ReadThread()
{
while (running)
{
if (ns.DataAvailable)
{
string msg = reader.ReadLine();
if (String.IsNullOrEmpty(msg)) continue;
Process(msg); //Process the message aka get it back to the Login method
}
}
}
编辑 2: 基本上我希望能够调用一个登录方法,该方法将写入 TcpClient 并等待接收来自同一流的回复,然后返回一个布尔值。
但是像这样的基本方法不会削减它:
public bool Login(string username, string password) {
writer.Write("{ \"username\" : \"" + username + "\", \"password\" : \"" + password + "\" }";
string response = reader.ReadLine();
if (response == "success") return true;
else return false;
}
这不起作用,因为其他数据会通过流自动推送给我,因此在等待 ReadLine() 时,我可能会得到其他任何东西,而不是我正在寻找的响应。
所以我正在寻找一个可以解决这个问题的解决方案,目前我有一个线程正在运行,它纯粹是为了从流中读取然后处理消息,我需要从该线程获取消息到上述方法。
我考虑这样做的一种方法是在读取消息时将其放入全局列表中,然后可以将 Login 方法放入一个循环中,该循环检查列表,直到在列表中找到消息。但如果我的想法是正确的,这是一个可怕的概念。所以我正在寻找替代方案。