TCP IP客户端在WPF为Ubuntu 14服务器

本文关键字:Ubuntu 服务器 WPF IP 客户端 TCP | 更新日期: 2023-09-27 18:18:03

我正在尝试在WPF GUI/c#中创建TCP IP客户端。. NET用于ubuntu服务器。

问题:我能够连接到服务器机器,连接正常工作,正确发送消息,并且ubuntu控制台也显示,客户端连接并发送了这个命令,就像在服务器上开始视频馈送一样,但是当涉及到读取响应时没有发生任何事情-它不读取应该由ubuntu服务器返回的字节数组。实际上,在message - 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();
        }
    }
}
<<p> 强大的文本/strong>请建议为什么它停止工作或让我知道,如果我做错了什么。

TCP IP客户端在WPF为Ubuntu 14服务器

我认为问题是,如果没有更多的包,它会逃避while循环。如果您想无休止地检查它,您应该尝试使用for。但我不确定。

是的,应该是这样。如果在while循环开始的那一刻没有package,它就会终止自己,因为没有东西可读。这样你就可以检查Ubuntu服务器是否返回了什么。