c# - 从 telnet C# tcpclient 获取响应
问题描述
我一直在浏览有关我的担忧的答案,但我找不到具体的答案,或者至少找不到关于从 Telnet 连接获得响应的清晰想法。这是我的代码:
TcpClient vpnMI = new TcpClient("127.0.0.1", 7505);
String message = "hold release\n";
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
NetworkStream stream = vpnMI.GetStream();
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent {0}", message);
data = new Byte[256];
MemoryStream memoryStream = new MemoryStream();
String responseData = String.Empty;
Int32 bytes = 0;
do
{
bytes = stream.Read(data, 0, data.Length);
memoryStream.Write(data, 0, bytes);
}
while (stream.DataAvailable);
responseData = System.Text.Encoding.ASCII.GetString(memoryStream.ToArray());
Console.WriteLine("Received: {0}", responseData);
// Close everything.
stream.Close();
vpnMI.Close();
但是我只能在发送“保留释放”之前得到响应,即使之后有响应。预先感谢您的回复。
解决方案
我正在使用这段代码,您可以看看是否有帮助:
public async Task<string> SendMessageAsync(string host, int port, string message, string encoding = "utf-8")
{
using (var tcpClient = new TcpClient())
{
//connect
await tcpClient.ConnectAsync(host, port);
using (NetworkStream networkStream = tcpClient.GetStream())
{
//write message to stream
var enc = Encoding.GetEncoding(encoding);
var bytes = enc.GetBytes(message);
await networkStream.WriteAsync(bytes, 0, bytes.Length);
//read response from stream
var buffer = new byte[READ_BUFFER_SIZE];
using (var ms = new MemoryStream())
{
//read all bytes to ms
while (true)
{
int byteCount = await networkStream.ReadAsync(buffer, 0, READ_BUFFER_SIZE);
ms.Write(buffer, 0, byteCount);
if (byteCount < READ_BUFFER_SIZE)
{
break;
}
}
//convert ms to string
ms.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(ms, enc))
{
var result = await sr.ReadToEndAsync();
return result;
}
}
}
}
}
networkStream.ReadAsync() 返回实际从流中读取的字节数,如果此计数小于您尝试读取的计数,则为最后一部分。
推荐阅读
- css - 图像按高度缩放
- javascript - WebRTC onnegotiationneeded
- javascript - JQuery 从一个值中设置数据名称
- javascript - 未选择的元素也被突出显示,为什么?
- c# - 在哪里/如何存储或生成客户端机密?
- django - 在 Django 应用程序中,在哪里以及如何设置 LANGUAGE_CODE?
- c++ - 三元运算符内的赋值
- javascript - 我在 Reactjs 中遇到 Node_modules 错误
- php - Windows 10 / PHP CLI:未从 ProgramFiles 文件夹加载 php.ini 文件
- java - Springboot 使用 IMAP 监听电子邮件