繁体   English   中英

WPF中用于Ubuntu 14服务器的TCP IP客户端

[英]TCP IP Client in WPF for Ubuntu 14 Server

我正在尝试在WPF GUI / C#.NET中为Ubunu服务器创建TCP IP客户端。

问题:我能够连接到服务器机器,连接正常,发送消息正确,并且也显示了ubuntu控制台,客户端已连接并在服务器上发送了此命令,例如启动视频提要,但是当涉及到读取响应时没有任何反应-它不会读取Ubuntu Server应该返回的字节数组。 实际上在消息-102上,它应该启动服务器上的视频提要,并返回视频提要字节数组,该数组应进一步读取并显示视频。 由于我无法从服务器读取提要,因此尚未编写任何代码来显示视频提要,但是,客户端将命令(消息)正确地发送到服务器,如前所述,它可以在Ubuntu服务器计算机的控制台上查看。 请建议谢谢!

下面是代码,请看一下并向我建议我做错了什么:

namespace POC_TCP_Listener
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private int WhichEventFired = 0;

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            try
            {
                // string message = "{Site: 1}";
                WhichEventFired = 1; //Start Video Feed
                Thread ClientThread = new Thread(new ThreadStart(ConnectToServerAndRetrieveBytes));
                ClientThread.Start();

            }

            catch (Exception ex)
            {
                string st = ex.Message;

            }
        }

        private void ConnectToServerAndRetrieveBytes()
        {

            TcpClient TCP = new TcpClient();
            TCP.Connect("IPAddress", 5001);

            byte[] packet;

            var size = 9;
            var header = 102;
            var siteId = 1;
            var state = 1;

            if (WhichEventFired == 1)
            {
                header = 102;   // Start Video Feed
            }
            else if (WhichEventFired == 2)
            {
                header = 114; // Stop Video Feed
            }
            else
            {
                header = 115; // query Temperature
            }

            // <8> <115> <1>
            packet = BitConverter.GetBytes(size).Reverse().Concat(BitConverter.GetBytes(header).Reverse()).Concat(BitConverter.GetBytes(siteId).Reverse()).Concat(BitConverter.GetBytes(state).Reverse()).ToArray();


            // Translate the passed message into ASCII and store it as a Byte array.
            Byte[] data = packet;

            // Get a client stream for reading and writing. 

            NetworkStream stream = TCP.GetStream();

            // Send the message to the connected TcpServer. 

            stream.Write(data, 0, data.Length);

            byte[] buffer = new byte[64 * 1024];

            using (MemoryStream ms = new MemoryStream())
            {
                int read;
// In the below line - it stops and nothing happens after it - Please Suggest
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
                // return ms.ToArray();
            }

            stream.Close();
            TCP.Close();
        }
    }
}

强烈的文字,请说明为什么它会停止工作,或者如果我做错了什么,请告诉我。

我认为问题在于,如果没有更多的程序包,它将退出while循环。 如果要无休止地检查它,则应尝试使用for。 但是我不确定。

是的,应该这样。 如果while循环开始时没有包,则它将终止,因为没有要读取的内容。 因此,您可以检查Ubuntu Server是否返回了某些信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM