Klient/Server przesyłanie JSON błąd połączenia socketa

0

Mam klase Dane:

public class Dane
 {
        public String Imie{ get; set; }
        public String Nazwisko { get; set; }
}

I kod dla servera:

    class Program
    {
        static async void Main(string[] args)
        {
            TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080);
            server.Start();
            while (true)
            {
                Console.WriteLine("Waiting for client");
                TcpClient client = await server.AcceptTcpClientAsync();

                var ar = Deserializacja<Dane[]>(client.GetStream());
                Console.WriteLine(ar[0].ToString());
            }
        }

        public static T Deserializacja<T>(Stream stream)
        {
            JArray arr = DeserializeFromStream<JArray>(stream);
            return arr.ToObject<T>();
        }

        public static T DeserializeFromStream<T>(Stream stream)
        {
            var sr = new StreamReader(stream);
            var jsonTextReader = new JsonTextReader(sr);
            return (T)new JsonSerializer().Deserialize(jsonTextReader);

        }
    }

I klienta:

   class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = new TcpClient();
            client.ConnectAsync(IPAddress.Parse("127.0.0.1"), 8080);
            Dane[] td = new Dane[1];
            Dane d = new Dane();
            d.Imie = "LLL"; d.Nazwisko = "BBB";
            td[0] = d;
            Serializacja<Dane[]>(client.GetStream());

        }
        public static void Serializacja<T>(Stream stream)
        {
            var sw = new StreamWriter(stream);
            var jsonTextWriter = new JsonTextWriter(sw);
            JsonConvert.SerializeObject(jsonTextWriter, new JsonSerializerSettings()
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                });
        }
    }

W kliencie wywala mi błąd: 'The operation is not allowed on non-connected sockets.' Co robie źle?

0

nie czekasz aż klient się rzeczywiście połączy. Async na końcu metody powoduje, że sterowanie jest przekazywane do reszty metody nie czekając na to czy klient się połączy czy nie. Albo zrezygnuj z Async albo sprawdzaj czy się połączył https://stackoverflow.com/que[...]lient-connectasync-get-status

0

@abrakadaber: a gdybym nie miał dostepu do klienta?

0

no ale klient jest źle napisany więc jak chcesz rozwiązać problem nie zmieniając jego kodu?

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