Ich benutze Visual Studio, um diesen kleinen TcpServer zu programmieren.Programm hängt, wartet auf Eingabe, die ich nie geben kann
Es ist wirklich spezifisch. Der Server hört Port 1234 ab und befindet sich unter IP 127.0.0.1 Unsere Lehrer haben uns ein Programm zur Verfügung gestellt, das versucht, sich mit dem Port dieser IP zu verbinden, wenn Sie auf "Verbinden" klicken. Es funktioniert für alle anderen, daher muss es ein Codierungsfehler sein.
Wenn ich auf connect klicke, sendet das Programm das Wort "GET" über den Stream, auf den ich mit einer Liste von bereits verbundenen IP-Adressen antworten muss und dann einen Zeilenumbruch, der nur einen enthält.
Wenn ich trennen, das Programm, das Wort „REM“ sendet und ich muss einfach, wenn aus meiner Liste entfernen (die eine allgemeine Liste ist)
ich eine Klasse TCPServer haben (wir hatten unseren eigenen zu machen) was hat dies als Hauptcode:
this.tl = new TcpListener(IPAddress.Any, PORT);
tl.Start();
while(true)
{
TcpClient tcl = tl.AcceptTcpClient();//here the server will wait forever untill someone connects, meaning the "new Thread" statement is never reached untill someone connects.
TcpHelper th = new TcpHelper(tcl,conf);
new Thread(new ThreadStart(th.Start)).Start();//should be multi-threaded, not sure if it is.
//t.Start();
}
TcpHelper sieht wie folgt aus (suchen Sie nach dem kommentierten Text „hier ist das Problem“ innerhalb der usings):
public class TcpHelper
{
private TcpClient tc;
private IPEndPoint ipe;
private string get;
private Configuration conf;
public TcpHelper(TcpClient tc, Configuration conf)
{
this.tc = tc;
this.conf = conf;
}
public void Start()
{
using (NetworkStream nws = this.tc.GetStream())
{
using (StreamReader sr = new StreamReader(nws))
{
using (StreamWriter sw = new StreamWriter(nws))
{
this.ipe = (IPEndPoint)tc.Client.RemoteEndPoint;
this.conf.List.Add(this.ipe.Address);
bool conn = true;
while (conn)
{
this.get = sr.ReadLine();//here's the problem
switch (this.get)
{
case "GET":
foreach (IPAddress address in this.conf.Lijst)
{
sw.WriteLine(address.ToString());
}
sw.WriteLine(".");
break;
case "REM":
this.conf.List.Remove(this.ipe.Address);
sw.WriteLine("OK.");
conn = false;
break;
default:
break;
}
}
}
}
}
}
#region Properties
public IPEndPoint Ipe
{
get
{
return this.ipe;
}
}
#endregion
}
Sie können mithilfe von Anweisungen übereinander stapeln; Sie müssen Klammern nicht wie Nüsse nisten. – Will
Ich weiß, ich finde das optisch ansprechend. – KdgDev