[英]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.