Avatar billede microjet Nybegynder
24. marts 2009 - 13:07 Der er 2 kommentarer og
1 løsning

StreamWriter - Stream stopper pludselig efter kort tid!

Hejsa

Jeg er stødt ind i nogle problemer med at bruge StreamWriter.

Jeg har lavet en simpel Server og Client Console applikation, hvor klienten streamer tekst til serveren, men streamingen stopper efter meget kort tid... det virker som om en eller anden buffer bliver fyldt

Nedenunder er de stumper kode. Start først Server og dernæst Client. De køre blot lokalt på 127.0.0.1.

Senere skal jeg bruge det til at serialisere nogle objekter og sende dem via stream'en

Jeg håber virkelig at nogle kan hjælpe... jeg har rodet med det i flere dage nu :-(

//SERVER kode:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class StreamTcpSrvr
{
    public static void Main()
    {
        string data;
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
        Socket newsock = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
        newsock.Bind(ipep);
        newsock.Listen(10);
        Console.WriteLine("Waiting for a client...");
        Socket client = newsock.Accept();
        IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
        Console.WriteLine("Connected with {0} at port {1}",
                newclient.Address, newclient.Port);
        NetworkStream ns = new NetworkStream(client);
        StreamReader sr = new StreamReader(ns);
        StreamWriter sw = new StreamWriter(ns);
        string welcome = "Welcome to my test server";
        sw.WriteLine(welcome);
        sw.Flush();
       
        while (true)
        {
            try
            {
                data = sr.ReadLine();
            }
            catch (IOException)
            {
                break;
            }

            Console.WriteLine(data);
            sw.WriteLine(data);
            sw.Flush();
        }
        Console.WriteLine("Disconnected from {0}", newclient.Address);
        sw.Close();
        sr.Close();
        ns.Close();
    }
}





//CLIENT kode:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Threading;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Collections.Generic;


public class StreamTcpClient
{




    public static void Main()
    {
        IPEndPoint ipep = new IPEndPoint(
                IPAddress.Parse("127.0.0.1"), 9050);
        Socket server = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
        try
        {
            server.Connect(ipep);
        }
        catch (SocketException e)
        {
            Console.WriteLine("Unable to connect to server.");
            Console.WriteLine(e.ToString());
            return;
        }
        NetworkStream ns = new NetworkStream(server);
        StreamReader sr = new StreamReader(ns);
        StreamWriter sw = new StreamWriter(ns);

        int i = 1;
        while (i<5000)//sender 5000 test strenge
        {

            Thread.Sleep(10);//indsat for at vise at det ikke er fordi det går for stærkt
            try
            {
                string Str2 = Convert.ToString(i++) + "  " + "TESTING";//streamer til server
                sw.WriteLine(Str2);
                sw.Flush();
                Console.WriteLine(Str2);//output til client

            }
            catch (IOException)
            {
                break;
            }
        }
        Console.WriteLine("Disconnecting from server...");
        sr.Close();
        sw.Close();
        ns.Close();
        server.Shutdown(SocketShutdown.Both);
        server.Close();
    }
}
Avatar billede Syska Mester
24. marts 2009 - 20:52 #1
et eller andet må jo ske ...

Hvad gør den hvis du køre begge apps i Debug mode ?
Avatar billede microjet Nybegynder
25. marts 2009 - 00:36 #2
Hej buzzz

Nej der sker ikke mere! :-)

Client sender:(med eller uden delay mellem gør ingen forskel)
1  TESTING
2  TESTING
osv.

Serveren modtager kun til og med 1656  TESTING. Så sker der bare ikke mere. Programet køre ikke mere i While(true) løkken

jeg prøvede at indsætte:

            if (data == "1655  TESTING")
            {
                Thread.Sleep(10); //breakpoint her!
            }

og herefter steppe gennem, men ved 1656 skrives teksten og så er det bare helt slut Consol vinduet lukker ikke, så programet "dør" i løkken

Det samme sker med Client programmet ved 3224  TESTING... altså næsten dobbelt så længe

Så der må streames til en buffer eller cyberspace!

Men hvis duhar tid er det nemt lige at kopiere ind i Visuel studio og afprøve... fjern blot using System...soap i Client

Det er virkeligt mærkeligt, så jeg håber virkelig på at nogle kan hjælpe...
Avatar billede microjet Nybegynder
18. januar 2011 - 00:19 #3
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester