如何在C#中暂停接收数据流(TCP协议)?

时间:2018-03-21 10:45:14

标签: c# tcp

有人能告诉我如何在我的代码中暂停接收数据流吗? 目前,我的脚本(见下文)能够: - 等待数据 - 一旦数据从第三方软件流式传输,就读取数据(TCP协议)

- >我一直坚持如何在我收到一个字符(我的例子中为'a'或'b')时实现代码暂停数据流的方式。我听说过使用缓冲区我是非常新的实现这种类型的protocole。

我的最终目标是有一个循环,第三方软件使用TCP协议向UNITY发送“a”或“b”,然后UNITY接收“a”或“b”,并更新对象的颜色基于这个角色。

感谢您的帮助,

的Yannick

// Initialization of the script 
void Start() 
{ 
    _renderer = GetComponent(); 
    listener = new TcpListener(55001); 
    listener.Start(); 
    print("is listening"); 
}

void Update()
{
    if (!listener.Pending())
    { }
    else
    {
        print("socket comes");
        TcpClient client = listener.AcceptTcpClient();
        NetworkStream ns = client.GetStream();
        StreamReader reader = new StreamReader(ns);
        coherence = reader.ReadToEnd();
        print(coherence);
    }

    if (coherence == "a")
    {
        colorFin = Color.green;
    }
    else if (coherence == "b")
    {
        colorFin = Color.yellow;
    }
}

1 个答案:

答案 0 :(得分:0)

我没有尝试过,但我认为这样的事情应该有效:

...
else
{
    print("socket comes");
    TcpClient client = listener.AcceptTcpClient();
    NetworkStream ns = client.GetStream();
    StreamReader reader = new StreamReader(ns);
    while (true)
    {
        char coherence = (char)reader.Read());
        print(coherence);

        //... handle colors and whatever you want...
    }

}

因为StreamReader.Read一次只能读取一个字符。

您可能需要一些逻辑来执行任务或线程中的工作,并处理不正确的接收数据。但我认为这不属于这个问题的范围。