Сокет принимает несколько клиентов, но я не могу открыть файл - PullRequest
0 голосов
/ 28 марта 2012

В основном я написал эту программу для проверки строк.Я использовал метод сокета для этого.

Проблема в том, что я не могу понять, как и где именно открыть файл в этой программе и найти строки.Вместо того, чтобы давать строку поиска в программе, я хочу, чтобы клиент мог набирать / искать любые строки, которые он хочет.И когда я запускаю программу, мне нужен вывод на экран клиента.

Как я могу улучшить эту программу?Может ли кто-нибудь помочь мне с кодом?

Это моя программа:

class Program
{
    static void Main(string[] args)
    {
        TcpListener serversocket = new TcpListener(8888);
        TcpClient clientsocket = default(TcpClient);
        serversocket.Start();
        Console.WriteLine(">> Server Started");
        while (true)
        {
            clientsocket = serversocket.AcceptTcpClient();
            Console.WriteLine("Accept Connection From Client");
            LineMatcher lm = new LineMatcher(clientsocket);
            Thread thread = new Thread(new ThreadStart(lm.Run));
            thread.Start();
            Console.WriteLine("Client connected");
        }
        Console.WriteLine(" >> exit");
        Console.ReadLine();
        clientsocket.Close();
        serversocket.Stop();
    }
}
public class LineMatcher
{
    private static Regex _regex = new Regex("not|http|console|application", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
    private TcpClient _client;
    public LineMatcher(TcpClient client)
    {
        _client = client;
    }

    public void Run()
    {
        try
        {
            using (var reader = new StreamReader(_client.GetStream()))
            {
                string line;
                int lineNumber = 0;
                while (null != (line = reader.ReadLine()))
                {
                    lineNumber += 1;
                    foreach (Match match in _regex.Matches(line))
                    {

                        Console.WriteLine("Line {0} matches {1}", lineNumber, match.Value);
                    }
                }

            }
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine(ex.ToString());
        }
        Console.WriteLine("Closing client");
        _client.Close();
    }
} 

1 Ответ

1 голос
/ 29 марта 2012

Вот простой демонстрационный клиент, который работает для меня:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;

namespace AClient
{
    class Client
    {
        static void Main()
        {
            using (var client = new TcpClient("localhost", 8888))
            {
                Console.WriteLine(">> Client Started");

                using (var r = new StreamReader(@"E:\input.txt", Encoding.UTF8))
                using (var w = new StreamWriter(client.GetStream(), Encoding.UTF8))
                {
                    string line;
                    while (null != (line = r.ReadLine()))
                    {
                        w.WriteLine(line);
                        w.Flush(); // probably not necessary, but I'm too lazy to find the docs
                    }
                }

                Console.WriteLine(">> Goodbye");
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...