Това е програма за търсене на низове от файл. Низът, изискван от клиента, се дава от страната на клиента, в моя случай, с помощта на 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