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>请建议为什么它停止工作或让我知道,如果我做错了什么。
我认为问题是,如果没有更多的包,它会逃避while循环。如果您想无休止地检查它,您应该尝试使用for。但我不确定。
是的,应该是这样。如果在while循环开始的那一刻没有package,它就会终止自己,因为没有东西可读。这样你就可以检查Ubuntu服务器是否返回了什么。