[英]Telnet Server in C# :AsyncConnection in C#
我正在編寫一個telnet服務器當我執行以下程序時,我的程序正在退出,並且僅在1 cmd中顯示內容。我已異步使用TCP,但我的內容未顯示在2cmd上。有關此問題,請幫助我。
public void Start()
{
Int32 port = 21;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
server.Start();
Byte[] bytes = new Byte[256];
Console.WriteLine("Listening...");
StartAccept();
}
private void StartAccept()
{
// listener.BeginAcceptTcpClient(OnAccept, listener);
server.BeginAcceptTcpClient(HandleAsyncConnection, server);
}
private void HandleAsyncConnection(IAsyncResult res)
{
String data = null;
TcpListener listener = (TcpListener)res.AsyncState;
//listen for new connections again
TcpClient client = server.EndAcceptTcpClient(res);
Byte[] bytes = new Byte[256];
while (true)
{
server.Start();
// TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
data = null;
NetworkStream stream = client.GetStream();
int b, i, a;
string str = null;
string str1 = null;
string str3 = null;
int k = 0;
int c = 0;
if (stream.CanWrite)
{
if (c == 0)
{
`enter code here`
byte[] Mybuff = Encoding.ASCII.GetBytes("Please Enter USer ID and Password");
stream.Write(Mybuff, 0, Mybuff.Length);
//StartAccept();
c++;
}
else
{
byte[] Mybuff = Encoding.ASCII.GetBytes("Please Enter USer ID and Password");
stream.Write(Mybuff, 0, Mybuff.Length);
StartAccept();
}
}
}
}
嘗試添加Console.ReadLine();
在StartAccept();
保持控制台運行。
如果我理解正確,那么您正在嘗試將要在控制台1中鍵入的內容顯示在控制台2中,或者至少要使相同的數據顯示在兩個控制台窗口中,這些數據與通過telnet命令從另一個控制台窗口發送的消息相同。
如果是這種情況,並且您使用相同的代碼來設置命令控制台,那么由於端口沖突,該命令將無法在本地運行。 第一個命令控制台不需要為第二個控制台使用端口21的所有權。
在Windows機器上,現在可以使用某些WCF功能實現端口共享。 有關更多信息,請參見此處 。
通常,在編寫自己的應用程序時,建議使用與任何其他程序都不接近的端口號。 說17657而不是21,但這可能會因您的應用程序打算做什么而變色。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.