【发布时间】:2010-08-19 20:24:45
【问题描述】:
您好, 我在 C# 中有自定义 Telnet 客户端。我正在使用它与 IMAP 服务器进行通信。它就像写命令一样工作,然后得到响应。测试代码:
Telnet tc = new Telnet();
// setup server credentials
const string server = "pop.nexlink.net";
const int port = 140;
const int timeout = 70;
// establish server connection
tc.Setup(server, port, timeout);
// test initial server response
Console.WriteLine(tc.output);
// set-up a few commands to send
var array = new[] { "USER AppChecker@nexlink.net", "PASS password", "QUIT" };
// while connected to server
if (tc.IsConnected)
{
foreach (string str in array)
{
// Show command on console
Console.WriteLine(str);
// Write to Stream
tc.WriteLine(str);
// Read from Stream
tc.Read();
// Test the Stream output
Console.Write(tc.output);
}
}
// close connection
tc.Disconnect();
调用上述代码的输出是:
- 用户 AppChecker@nexlink.net
- +OK 欢迎使用 Atmail POP3 服务器 - 使用 user@domain 登录。
- +OK 需要密码。
- PASS 密码
- 退出
- +OK 登录。
- +好的,再见。
这是一个简单的示例,但它显示了竞争条件的问题。第 nr.6 行的输出应出现在 nr 之前。 5
问:如何处理?
【问题讨论】:
-
似乎做得很好。服务器在完成用户登录之前收到退出消息。
-
有可能。反应相当随机。这取决于连接速度、服务器响应时间、要返回的数据量。一旦有更多的命令每个都请求更大的流,它就会变得非常混乱。一般来说,读取比写入慢得多。
标签: c# synchronization telnet