c# - 比较通过 NetworkStream 发送到服务器/从服务器发送的值

标签 c# sockets encoding network-programming tcpclient

当你知道为什么发送到服务器的字符串“kamote”和从服务器接收到的字符串“kamote”不一样时..

客户

    tcpClient = new TcpClient();
    tcpClient.Connect(ServerIP, Port);
    connectionState = (HandShake("kamote", tcpClient)) ? "Connected to " + ServerIP.ToString() : "Host unreachable.";

    private bool HandShake(String str, TcpClient tcpClient)
    {
        using (NetworkStream ns = tcpClient.GetStream())
        {
            byte[] toServer = Encoding.ASCII.GetBytes(str);
            ns.Write(toServer,0,toServer.Length);                
            ns.Flush();

            byte[] fromServer = new byte[10025];
            ns.Read(fromServer, 0, (int)tcpClient.ReceiveBufferSize);

            return Encoding.ASCII.GetString(fromServer).Equals(str);
        }
    }

服务器

    TcpClient tcpClient = new TcpClient();
    tcpClient = tcpListener.AcceptTcpClient();

    NetworkStream ns = tcpClient.GetStream();

    byte[] fromClient = new byte[10025];
    ns.Read(fromClient, 0, (int)tcpClient.ReceiveBufferSize);

    byte[] toClient = fromClient;
    ns.Write(toClient, 0, toClient.Length);            
    ns.Flush();       

客户端发送“kamote”
服务器收到“kamote”
服务器发送“kamote”
客户端收到“kamote”

HandShake() 始终返回 false。我该如何解决这个问题?

最佳答案

正如您在上一个问题中所问的那样,您没有跟踪收到的字节数。所以发生的事情是这样的:

  • 在客户端,您发送字符串“kamote”。
  • 在服务器上,它将该字符串接收到一个 10025 字节长的缓冲区中。
  • 然后服务器将整个缓冲区发送回客户端——所有 10025 字节
  • 客户端接收全部或部分这 10025 个字节并将它们转换为字符串。

转换后的字符串实际上是“kamote”,后面有一堆 0。

必须使用Read 的返回值来了解您收到了多少字节。

关于c# - 比较通过 NetworkStream 发送到服务器/从服务器发送的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218218/

相关文章:

c# - 如何将 List<string> 转换为 List 中的逗号分隔引号字符串

c# - 如何更改序列化对象?

c - 非终止 while 循环,同时使用 recv

go - 递归数据结构解码在 Go Lang Protobuf 中给出错误 "cannot parse invalid wire-format data"

encoding - 不支持将编码从未知 8 位转换为 us-ascii

c# - 使用异步在后台加载表单数据 - MVVM

c# - N单位。索引 [0] 处的值不同

rest - 自定义休息协议(protocol)是基于二进制而不是像 Http 那样基于文本的,这是一件好事吗?

c# - SslStream.AuthenticateAsClient - 发送时无法立即完成非阻塞套接字操作

html - 将 svg 转换为 svg base64 并将其嵌入到 HTML 文档中