Это программа для поиска строк из файла. Требуемая клиентом строка передается со стороны клиента, в моем случае с помощью telnet. Программа, которую я написал, является серверной. Он принимает несколько клиентов. Но проблемы, которые я не могу исправить, -
- Он не проверяет строки из файла.
- Как только клиент подключается, он не может вводить строки, которые он хочет найти в этом конкретном файле.
- Он не отправляет ответ обратно (т.е. присутствует ли строка в файле или нет) клиенту. Он отображается только на стороне сервера.
Как мне поступить дальше? Может ли кто-нибудь сказать мне, где я ошибаюсь? Может ли кто-нибудь помочь мне с кодом? Это моя проба программы..
class Program
{
static void Main(string[] args)
{
IPAddress ipad = IPAddress.Parse("192.168.0.181");
TcpListener serversocket = new TcpListener(ipad, 8888);
TcpClient clientsocket = default(TcpClient);
Byte[] bytes = new Byte[256];
serversocket.Start();
Console.WriteLine(">> Server Started");
while(true)
{
clientsocket = serversocket.AcceptTcpClient();
Console.WriteLine("Accepted 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 //I've jumbled it up here. Don't know what exactly to do..
{
public string fileName = "c:/myfile2.txt";
private TcpClient _client;
public LineMatcher(TcpClient client)
{
_client = client;
}
public void Run()
{
try
{
StreamReader sr = new StreamReader("c:/myfile2.txt");
using (var reader = new StreamReader(_client.GetStream()))
{
string line ="";
int lineNumber = 0;
while (null != (line = sr.ReadLine()))
{
lineNumber += 1;
byte[] data = new byte[1024];
NetworkStream stream = _client.GetStream();
//if (line.Equals(line))
for (int ct = stream.Read(data,0, data.Length-1); 0 < ct; ct = stream.Read(data,0,data.Length-1))
line += Encoding.ASCII.GetString(data, 0, ct);
line = line.Trim();
{
lineNumber.ToString();
data = Encoding.ASCII.GetBytes(line);
_client.Client.Send(data, data.Length, SocketFlags.None);
Console.WriteLine("Line {0} matches {1}", lineNumber, line);
}
}
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.ToString());
}
Console.WriteLine("Closing client");
_client.Close();
}
}
LineMatcher.Run
, так как это может быть решающий момент - person Random Dev   schedule 05.04.2012thread.Start()
и еще одну внутри методаRun
в вашем классеLineMatcher
- затем запустите свою программу (F5) и используйте telnet для подключения и посмотрите, сработали ли ваши точки останова и что ваша программа делает оттуда ... иLineMatcher.Run
— это имя методаRun
, в котором происходит магия (вы же написали это, не так ли?) - person Random Dev   schedule 05.04.2012thread.Start
, программа дальше не идет. - person 3692   schedule 05.04.2012thread.start
. У меня только что была точка останова в методе потока Run, то естьpublic void Run
. Все равно ничего не делает. Он останавливается там, где раньше, когда была точка останова наthread.start
. Что мне делать дальше? - person 3692   schedule 05.04.2012byte[] data = new byte[1024]; NetworkStream stream = _client.GetStream(); for (int ct = stream.Read(data,0, data.Length-1); 0 < ct; ct = stream.Read(data,0,data.Length-1)) line += Encoding.ASCII.GetString(data, 0, ct); line = line.Trim();
Это то, что я добавил вwhile(null---) { The above code }
Это неправильно? - person 3692   schedule 05.04.2012for (int ct = stream.Read(data,0, data.Length-1); 0 < ct; ct = stream.Read(data,0,data.Length-1))
Значения (строки), которые я передаю со стороны клиента (telnet), не отображаются на стороне сервера. Но при отладке каждой строки в программе значения появляются ( если это было то, что вы имели в виду как сообщения в консоли). Я в замешательстве, и я полагаю, что я запутал вас тоже. Прости, Карстен. :) - person 3692   schedule 05.04.2012sr
вместоstream
- здесь становится много времени, поэтому я постараюсь включить это в ответ - person Random Dev   schedule 05.04.2012