чтение содержимого файла с сервера и отправка его клиенту через сокет C # - PullRequest
0 голосов
/ 08 ноября 2010

Я пытаюсь здесь отправить содержимое текстового файла на сервер и отправить его клиенту

это сервер

Socket server = new Socket(AddressFamily.InterNetwork,
                 SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 9050);
        server.Bind(localEP);
        server.Listen(10);
        Console.WriteLine("Waiting for Client...");
        Socket client = server.Accept();
        IPAddress clientAddress = ((IPEndPoint)client.RemoteEndPoint).Address;
        Console.WriteLine("Got connection from " + clientAddress);

    NetworkStream stream = new NetworkStream(client); 
    StreamReader reader = new StreamReader(stream);
    StreamWriter writer = new StreamWriter(stream);


    writer.WriteLine("Welcome to my test server");
    writer.Flush();
    string line = null;
    while ((line = reader.ReadLine()).Length != 0)
    {
        Console.WriteLine("loooking for this file:" + line);
        System.IO.FileInfo fi = new System.IO.FileInfo(line);
        Console.WriteLine("Found");
        writer.WriteLine("File Size: " + fi.Length + "\nContent:");
        StreamReader tr = new StreamReader(line);
        string s = null;
        //string b = "";
    while((s= tr.ReadLine()).Length != 0)
        {
            writer.WriteLine(tr.ReadLine());
            writer.Flush();
        }

        tr.Close();

    }
    client.Close(); server.Close();

часть клиента, где он читает с сервера, это

String line = null;
        line = textBox3.Text;
        writer.WriteLine(line);   // Send line to Server
        writer.Flush();
        string s = null;
        // Read line from server, then echo on the screen 
        while((s= reader.ReadLine()).Length != 0)
        {
            textBox4.Text += reader.ReadLine() + "\r\n\r\n";
        }

когда я запускаю код, ошибок нет вообще, но клиент застревает, и когда я останавливаю сервер, содержимое файла покажет ,,, Кстати, его приложение с графическим интерфейсом

Ответы [ 3 ]

0 голосов
/ 08 ноября 2010

Пример кода для StreamReader использует приведенную ниже конструкцию для определения конца потока.Кроме того - вы действительно хотите прочитать две строки в этом цикле?

while (reader.Peek() >= 0) 
{
    s= reader.ReadLine();
    textBox4.Text += s + Environment.NewLine + Environment.NewLine;
}
0 голосов
/ 08 ноября 2010

Вы упомянули, что это приложение с графическим интерфейсом?Если да, то по какой теме вы читаете?Если вы выполняете чтение в основном потоке, цикл сообщений приложения будет заморожен, и ничего не будет отображаться, пока вы не остановите другую сторону и не разорвите соединение.

0 голосов
/ 08 ноября 2010

while ((s = reader.ReadLine ())! = Null) {textBox4.Text + = s;}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...