readline + ucina pierwszy znak.

0

Witam, pisze prosty komunikator i mam problem, przy wysyłaniu tekstu np "cześć", do serwera trafia wiadomość "ześć". Jest to na pewno wina po stronie klienta, ponieważ sprawdzałem i po wprowadzeniu tekstu jest ono natychmiast skracane o pierwszą literkę. Problem ten występuje tylko za pierwszym razem tzn gdy wysyłam pierwsza wiadomość podczas wysyłania następnych jest już OK
Kod odpowiedzialny za wysyłanie tekstu do serwera:

NetworkStream myStream = server.GetStream();
                    byte[] bajty = null;
                    string tekst = null;
                    while (true)
                    {
                        tekst = Console.ReadLine() + "\n";
                        bajty = Encoding.ASCII.GetBytes(tekst);
                        myStream.Write(bajty, 0, bajty.Length);
                        myStream.Flush();
                    } 

Pozdrawiam i z góry dziękuje za pomoc.

0

co to znaczy „po wprowadzeniu tekstu jest ono natychmiast skracane”? natychmiast czyli kiedy? jak to sprawdzasz?
być może po stronie serwera masz jakiś nadmiarowy Read który ci zjada pierwszy znak.

0

Sprawdzam za pomocą break pointów, a co znaczy ze od razu skracane? Chodziło mi o to ze po wprowadzeniu w konsole i naciśnięciu enter pod zmienna tekst jest "zesc" a nie "czesc" i jest tak tylko raz, po wysłaniu następnych wiadomości jest wszystko OK.

0

Przerobiłem na szybkiego twój kod, żeby się skompilował u mnie:

namespace ConsoleSandbox
{
	class Program
	{
		static void Main(string[] args)
		{
			byte[] bajty = null;
			string tekst = null;
			int i = 0;
			while (i<3)
			{
				i++;
				tekst = Console.ReadLine() + "\n";
				bajty = Encoding.ASCII.GetBytes(tekst);
				//myStream.Write(bajty, 0, bajty.Length);
				//myStream.Flush();

				for (int k = 0; k < bajty.Length; k++)
				{
					Console.Write(bajty[k] + " ");
				}

				Console.WriteLine();
			}

			Console.ReadLine();
		}
	}
}

Rezultat:
Cześć
67 122 101 63 63 10
Cześć2
67 122 101 63 63 50 10
Cześć3
67 122 101 63 63 51 10

Jak widać nic nie zjada - ani w zmiennej "tekst", ani w "bajty".
Może jednak jest jakiś błąd wewnątrz

myStream.Write(bajty, 0, bajty.Length)

?

1

Ok już działa, nie była to wina kodu który wkleiłem, na końcu programu dałem console.read(), co wpływało niekorzystnie na wątek i ucinało mi pierwszą literkę. Pozdrawiam i dziękuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1