сравнение значений, отправленных на сервер с сервера NetworkStream - PullRequest
1 голос
/ 02 июня 2011

Когда вы знаете, почему отправленная строка «kamote» на сервер и строка, полученная «kamote» от сервера, не совпадают ..

CLIENT

    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.Как я могу это исправить?

Ответы [ 3 ]

4 голосов
/ 02 июня 2011

Как и в предыдущем вопросе, который вы задавали, вы не отслеживаете количество полученных байтов. Итак, что происходит, это:

  • На клиенте вы отправляете строку "kamote".
  • На сервере она получает эту строку в буфер длиной 10025 байт.
  • Затем сервер отправляет весь буфер обратно клиенту - все 10025 байтов
  • Клиент получает все или часть этих 10025 байтов и преобразует их в строку.

Строка, которая конвертируется, действительно "камоте" с кучей нулей после нее.

Вы должны использовать возвращаемое значение из Read, чтобы узнать, сколько байтов вы получили.

2 голосов
/ 02 июня 2011

Вы пытались ограничить длину строки фактическими считанными байтами, например так:

noOfBytes = ns.Read(bytes, 0, ...);
Encoding.ASCII.GetString(bytes, 0, noOfBytes);
1 голос
/ 02 июня 2011

Вы включаете много символов из 0, так как вы включаете всю fromServer в gettring. 0 не печатают, но они есть. Вы должны указать правильное количество байтов для декодирования.

...