无法从TCP/IP服务器C#控制台应用程序检索消息

无法从TCP/IP服务器C#控制台应用程序检索消息,c#,ssl,networking,tcp-ip,networkstream,C#,Ssl,Networking,Tcp Ip,Networkstream,我必须针对现有服务器(有特定文档)创建一个TCP/IP客户机,我遵循相同的方法,但仍然没有从服务器得到响应。 最初是邮件格式和SMTP命令的问题,我用另一个工作命令替换了它 我必须使用没有客户端证书的SSL进行登录 TcpClient client = new TcpClient("Server DNS", PORT); Console.WriteLine("-------------------------- \nConnection is : " + client.Connected); S

我必须针对现有服务器(有特定文档)创建一个TCP/IP客户机,我遵循相同的方法,但仍然没有从服务器得到响应。 最初是邮件格式和SMTP命令的问题,我用另一个工作命令替换了它

我必须使用没有客户端证书的SSL进行登录

TcpClient client = new TcpClient("Server DNS", PORT);
Console.WriteLine("-------------------------- \nConnection is : " + client.Connected);
SslStream stream = new SslStream(client.GetStream(), false, VerifyServerCertificate, null);

stream.AuthenticateAsClient("Server DNS");
Console.Write("Authentication status :" + stream.IsAuthenticated);
// FOR NOW I AM ONLY SENDING LOGIN COMMAND
string line = "BDAT 30 LAST<EOL>{login command}<LF>useridpassword";
stream.Write(Encoding.UTF8.GetBytes(line));
stream.Flush();
string serverMessage = ReadMessage(stream);
Console.WriteLine("\nServer says: {0}", serverMessage);
stream.Close();
TcpClient client=新的TcpClient(“服务器DNS”,端口);
Console.WriteLine(-----------------------------------\n连接为:“+client.Connected”);
SslStream stream=新的SslStream(client.GetStream(),false,VerifyServerCertificate,null);
客户端(“服务器DNS”);
写入(“身份验证状态:+stream.IsAuthenticated”);
//现在我只发送登录命令
string line=“BDAT 30 LAST{login command}useridpassword”;
stream.Write(Encoding.UTF8.GetBytes(行));
stream.Flush();
字符串serverMessage=ReadMessage(流);
WriteLine(“\n服务器说:{0}”,serverMessage);
stream.Close();
这将发送命令,但返回消息始终为空。 下面是我用于ReadMessage的方法

static string ReadMessage(SslStream sslStream)
        {
            // Read the  message sent by the client. 
            // The client signals the end of the message using the 
            // "<EOF>" marker.
            byte[] buffer = new byte[2048];
            StringBuilder messageData = new StringBuilder();
            int bytes = -1;
            sslStream.ReadTimeout = 60000;
            do
            {
                // Read the client's test message.
                bytes = sslStream.Read(buffer, 0, buffer.Length);

                sslStream.Flush();

                // Use Decoder class to convert from bytes to UTF8 
                // in case a character spans two buffers.
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
                decoder.GetChars(buffer, 0, bytes, chars, 0);
                messageData.Append(chars);
                // Check for EOF or an empty message. 
                if (messageData.ToString().IndexOf("<EOF>") != -1)
                {
                    break;
                }
            } while (bytes != 0);

            return messageData.ToString();
        }
静态字符串读取消息(SslStream SslStream)
{
//阅读客户端发送的消息。
//客户端使用
//”“马克。
字节[]缓冲区=新字节[2048];
StringBuilder messageData=新建StringBuilder();
int字节=-1;
sslStream.ReadTimeout=60000;
做
{
//阅读客户端的测试消息。
字节=sslStream.Read(缓冲区,0,缓冲区长度);
sslStream.Flush();
//使用Decoder类将字节转换为UTF8
//如果一个字符跨越两个缓冲区。
解码器解码器=Encoding.UTF8.GetDecoder();
char[]chars=new char[decoder.GetCharCount(缓冲区,0,字节)];
GetChars(缓冲区,0,字节,字符,0);
messageData.Append(字符);
//检查EOF或空消息。
if(messageData.ToString().IndexOf(“”!=-1)
{
打破
}
}while(字节!=0);
返回messageData.ToString();
}
下面是相同代码的屏幕截图


抱歉这么长的帖子,但我认为这些信息是必要的。 如蒙帮助,不胜感激。。这是非常令人沮丧的情况,因为我无法继续,因为过去8天的bcz的


谢谢。

您是应该发送
还是应该发送表示
LF
字符的
\n
。@ScottChamberlain,我必须发送的格式是:Message id+LF character(十六进制0A),这在文档中有描述。@RajatSingh您是如何处理的?我们遇到了同样的问题,希望您的案例能有所帮助。您是应该发送
还是应该发送表示
LF
字符的字符
\n
。@ScottChamberlain,我必须发送如下格式:消息id+LF字符(十六进制0A),这在《拉贾辛格博士》中有描述。@RajatSingh你是怎么做到的?我们也有同样的问题,希望你的案例能有所帮助。