【问题标题】:Not Recieving data into text file on sending Machine Credentials in TCP/IP protocol在 TCP/IP 协议中发送机器凭据时未将数据接收到文本文件中
【发布时间】:2014-02-19 17:40:21
【问题描述】:

我有一台 PBX 机器,我需要使用 Ip 和端口号以及用户名和密码进行通信。目前我可以使用 IP 地址和端口号连接到机器。但是在发送用户名和机器的密码进行身份验证我没有从机器中获取所需的数据到文本文件中,而是将用户名和密码以这样的格式发送到机器到文本文件中。

这是我在 c# 中的代码..

        ipaddress = "";
        int port = int.Parse("");
        textfileSaveLocation = "";

        byte[] data = new byte[1024];
        string stringData;
        //string input;

            IPAddress ipadd = IPAddress.Parse(ipaddress);
            IPEndPoint ipend = new IPEndPoint(ipadd,port);
            Socket sock = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
            sock.NoDelay = false;
            try
            {
                sock.Connect(ipend);
                textBox4.AppendText("Connected to host" + "\r\n");
            }
            catch (Exception dfg)
            {
                textBox4.AppendText("Problem connecting to host" + "\r\n");
                textBox4.AppendText(dfg.ToString ()+"\r\n");
                return;
            }
            try
            {
                int recv = sock.Receive(data);
                stringData = Encoding.ASCII.GetString(data, 0, recv);
                textBox4.AppendText(stringData + "\r\n");
                while (true)
                {
                    Byte[] bBuf;
                    string buf;


                    Application.DoEvents();

                    buf = String.Format("{0}/{1}", "SMDR", "PCCSMDR");
                    bBuf = Encoding.ASCII.GetBytes(buf);
                    sock.Send(bBuf);     


                    data = new byte[1024];
                    recv = sock.Receive(data);
                    stringData = Encoding.ASCII.GetString(data, 0, recv);
                    textBox4.AppendText(stringData + "\r\n");
                    string df = "";
                     try

        }

我试图从两天内找出错误但无法找出..请帮我找出我哪里出错了..

【问题讨论】:

  • 虽然我不知道您使用什么协议进行通信,但您发送的消息可能需要一些终止字符,例如"SMDR/PCCSMDR\n",以便服务器知道您已完成发送消息。任何基于 TCP 的协议都需要消息的长度前缀或终止后缀。
  • @C.Evenhuis 我正在使用 TCP/IP 协议并使用以太网(LAN)线与机器通信。这是我机器的链接。这是建议用户名和密码的链接@ 987654321@
  • @C.Evenhuis 我正在使用以太网/IP 协议向机器发送消息
  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。

标签: c# sockets tcp tcplistener tcp-ip


【解决方案1】:

specification 提到:

您可以激活“ASCII 数据查询”插件并将登录/密码请求指定为: SMDR#0D#0APCCSMDR#0D#0A

所以用户名和密码都需要以回车符结尾:

buf = String.Format("{0}\r\n{1}\r\n", "SMDR", "PCCSMDR");

【讨论】:

  • 如果我通过建议。 bBuf=Encoding.ASCII.GetBytes(buf); sock.Send(bBuf);那么连接是否会成功。
  • 非常感谢先生..这在给定的规范行中是什么意思..SMDR#0D#0APCCSMDR#0D#0A。请帮助我,因为我遇到了这种情况。
  • #0D 表示用十六进制值0D 或十进制13 表示的字符,#0A 是十进制10。这两个字符通常将光标设置到新行的最左边位置。您的 PBX 要求您使用这些字符终止用户名和密码。在 C# 中,它们可以输入为"\r\n"
  • 感谢先生的热情回复 .buf = String.Format("{0}\r\n{1}\r\n", "SMDR", "PCCSMDR");添加此行会将我的应用程序连接到 Pbx .. 先生,我说得对吗?
  • @Adi 我从未使用过该 PBX,但据我所知,这是创建登录消息的正确方法。
【解决方案2】:

这是指定软件用来发送登录名和密码的特殊格式字符串。

命令字符串将被解释为:

SMDRPCCSMDR

【讨论】:

  • 我可以用这个格式发送登录密码吗 buf = String.Format("{0}\r\n{1}\r\n", "SMDR", "PCCSMDR");
  • 这条线 SMDR#0D#0APCCSMDR#0D#0A 相对于 SMDR 意味着什么PCCSMDR
  • 是的,您可以发送 String.Format("{0}\r\n{1}\r\n", "SMDR", "PCCSMDR")。 表示这些 ASCII 字符。它们在格式字符串中指定为 \r 和 \n。
猜你喜欢
  • 2015-02-28
  • 2011-09-13
  • 2015-08-09
  • 2019-02-13
  • 1970-01-01
  • 2012-12-17
  • 2012-05-04
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多