Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;R";不等于;R";当通过TCP连接发送时_C#_String_Tcp_Tcpclient_Tcplistener - Fatal编程技术网

C# &引用;R";不等于;R";当通过TCP连接发送时

C# &引用;R";不等于;R";当通过TCP连接发送时,c#,string,tcp,tcpclient,tcplistener,C#,String,Tcp,Tcpclient,Tcplistener,我试图让客户端向我的服务发送一个命令,该命令是“R”。 但是,当我尝试生成IF语句时,它不会将通过TCP传入的“R”注册为等于我在程序中生成的字符串R。这是我的一些代码 byte[] message = new byte[1024]; byte[] command = Encoding.ASCII.GetBytes("R"); stream.Read(message, 0, message.Length); string messageIn

我试图让客户端向我的服务发送一个命令,该命令是“R”。 但是,当我尝试生成IF语句时,它不会将通过TCP传入的“R”注册为等于我在程序中生成的字符串R。这是我的一些代码

    byte[] message = new byte[1024];
        byte[] command = Encoding.ASCII.GetBytes("R");
        stream.Read(message, 0, message.Length);
        string messageIn = Encoding.ASCII.GetString(message);
        //updateUI("New Message =  " + messageIn);
        string commandString = Encoding.ASCII.GetString(command);

         if (Encoding.ASCII.GetString(message) == Encoding.ASCII.GetString(command))
正如您所看到的,我的印象是,将“R”放入字节,然后取出字节会导致这个问题,因此出现了巨型if语句。但是,这些条件中没有一个返回true,因为我的if块从未运行


我知道它返回“R”,因为当我将它输出到文本框时,这就是被打印的内容。通过tcp传输数据的行为是否会以某种方式更改字符串?

除了进行大量无意义的比较外,第一个问题是忽略了流的结果。请阅读
。。。而是在
消息
中用整个1024字节创建一个字符串。如果将其更改为:

int bytesRead = stream.Read(message, 0, message.Length);
string messageIn = Encoding.ASCII.GetString(message, 0, bytesRead);
。。。那你的处境会好得多。然而,这可能还不够好,除非这就是将要发送的全部内容。您正在处理一个流,但我怀疑您认为它是面向消息的,就像连接一端的一个
将映射到另一端的一个
。面向流的协议不是这样工作的。如果您有一条逻辑“消息”,那么当从流中读取时,您可能会得到一条消息的一部分、多条消息或任何内容。解决此问题的常见方法有:

  • 在每条消息之前包含长度前缀
  • 使用分隔符(例如,基于文本的协议的换行符)
有关更多详细信息,请参阅


此外,如果您的协议是基于文本的,那么最好在流周围创建一个
StreamReader
,这样您就可以只读取文本(例如,一次一行),而不是到处转换。

这段代码真的毫无意义。例如,
message==command
怎么可能?事实上,这是一个引用比较,因此无论您尝试什么,都保证为假,这两个数组甚至没有相同的内容!你只是随意地发垃圾邮件吗?请去掉代码中所有无意义的部分,只留下与您的问题相关的部分(您还需要清楚地说明)。在调用
stream.Read()之后,使用调试器查看
消息
数组中的内容。我得到一个字符串“R”,该字符串被编码为字节[],并通过流发送。那个字节[]是消息。我想检查字节[]是否转换回编码为.ASCII.GetString(message)的字符串等于“R”。刚刚检查了调试器,字节[0]是82,其余字节是0。这工作得好多了,谢谢!我不知道你是不是同一个人,但我很确定我在pluralsight上看过你的一系列视频。@BurntCandy:如果是我的名字,那么是的,那就是我:)